当前位置: 首页 > news >正文

postgresql-管理数据表

postgresql-管理数据表

  • 创建表
    • 数据类型
    • 字段约束
    • 表级约束
    • 模式搜索路径
  • 修改表
    • 添加字段
    • 删除字段
    • 添加约束
    • 删除约束
    • 修改字段默认值
    • 修改字段数据类型
    • 重命名字段
    • 重命名表
  • 删除表

创建表

在 PostgreSQL 中,使用 CREATE TABLE 语句创建一个新表:

CREATE TABLE table_name
(column_name data_type column_constraint,column_name data_type,...,table_constraint
);
  • 首先,table_name 指定了新表的名称
  • 括号内是字段的定义, column_name 是字段的名称, data_type 是它的类型,
    column_constraint 是可选的字段约束;多个字段使用逗号进行分隔
  • table_constraint 是可选的表级约束

数据类型

PostgreSQL 提供了丰富的内置数据类型,同时还允许用户自定义数据类型。最常见的基本
数据类型包括:

  • 字符类型,包括定长字符串 CHAR(n),变长字符串 VARCHAR(n),以及支持更大长度的
    字符串 TEXT。
  • 数字类型,包括整数类型 SMALLINT、INTEGER、BIGINT,精确数字 NUMERIC (p, s),
    浮点数 REAL、DOUBLE PRECISION
  • 时间类型,包括日期 DATE、时间 TIME、时间戳 TIMESTAMP
    官网关于类型的介绍

字段约束

PostgreSQL 支持 SQL 标准中的所有字段约束和表约束

  • NOT NULL,非空约束,该字段的值不能为空(NULL)
  • UNIQUE,唯一约束,该字段每一行的值不能重复。不过,PostgreSQL 允许该字段存在
    多个 NULL 值,并且将它们看作不同的值。需要注意的是 SQL 标准只允许 UNIQUE
    段中存在一个 NULL 值
  • PRIMARY KEY,主键约束,包含了 NOT NULL 约束和 UNIQUE 约束。如果主键只包
    含一个字段,可以通过列级约束进行定义(参考上面的示例);但是如果主键包含多个
    字段(复合主键)或者需要为主键指定一个自定义的名称,需要使用表级约束进行定义
  • REFERENCES,外键约束,字段中的值必需已经在另一个表中存在。外键用于定义两
    个表之间的参照完整性(referential integrity),例如,员工的部门编号字段必须是一个
    已经存在的部门
  • CHECK,检查约束,插入或更新数据时检查数据是否满足某个条件。例如,产品的价
    格必需大于零
  • DEFAULT,默认值,插入数据时,如果没有为这种列指定值,系统将会使用默认值代
    替。

表级约束

表级约束和字段约束类似,只不过它是基于整个表定义的约束,还能够为约束指定自定义的
名称。PostgreSQL 支持的表级约束包括:

  • UNIQUE(column1, …),唯一约束,括号中的字段值或字段值的组合必须唯一
  • PRIMARY KEY(column1, …),主键约束,定义主键或者复合主键
  • REFERENCES,定义外键约束
  • CHECK,定义检查约束
/** 员工表包含以下字段和约束:* employee_id , 员工 编 号, 整 数类 型 ,主 键 (通 过 表级 约 束为 主 键指 定 了名 称* emp_emp_id_pk);* first_name,名字,字符串;* last_name,姓氏,字符串,不能为空;* email,电子邮箱,字符串,不能为空,必须唯一(emp_email_uk);* phone_number,电话号码,字符串;* hire_date,雇佣日期,日期类型,不能为空;* salary,薪水,数字类型,必须大于零(emp_salary_min);* commission_pct,佣金百分比,数字类型;* manager_id,经理编号,外键(通过外键 emp_manager_fk 引用员工表的员工编号);* department_id,部门编号,外键(通过外键 emp_dept_fk 引用部门表 departments 的编号* department_id)* */
create table employees( employee_id integer not null, first_name character varying(20), last_name character varying(25) not null, email character varying(25) not null, phone_number character varying(20), hire_date date not null, salary numeric(8,2), commission_pct numeric(2,2), manager_id integer, department_id integer, constraint emp_emp_id_pkprimary key (employee_id), constraint emp_salary_mincheck (salary > 0), constraint emp_email_ukunique (email), constraint emp_dept_fkforeign key (department_id)references departments(department_id), constraint emp_manager_fkforeign key (manager_id)references employees(employee_id)) ;

在这里插入图片描述
除了自己定义表的结构之外,PostgreSQL 还提供了另一个创建表的方法,就是通过一个查
询的结果创建新表:

CREATE TABLE table_name
AS query;

或者

SELECT ...
INTO new_table
FROM ...;
--例如,我们可以基于 employees 复制出两个新的表:
CREATE TABLE emp1
AS
SELECT *
FROM employees;SELECT *
INTO emp2
FROM employees;
-- where 语句后面添加1=2,保证只创建表结构,不复制数据
create table d2
as 
select * from departments where 1=2;

这种方法除了复制表结构之外,还可以复制数据。官网关于create table as介绍
select into官网介绍

模式搜索路径

在 PostgreSQL 中,表属于某个模式(schema)。当我们创建表时,更完整的语法应该是:

CREATE TABLE schema_name.table_name

访问表的时候也是一样。但是我们在前面创建示例表的时候,并没有加上模式名称的限定。
这里涉及到一个模式的搜索路径概念

-- 我们先看一下当前的搜索路径:
show search_path;

在这里插入图片描述
搜索路径是一个逗号分隔的模式名称。当我们使用表的时候,PostgreSQL 会依次在这些模
式中进行查找,返回第一个匹配的表名;当我们创建一个新表时,如果没有指定模式名称,
PostgreSQL 会在第一个模式中进行创建。
第一个模式默认为当前用户名,如果不存在该模式,使用后面的公共模式(public)。

select user;

在这里插入图片描述
当前用户名为 postgres,但是不存在名为 postgres 的模式,因此我们创建的表会位 public 模式中。

--我们可以通过 set 命令修改默认的搜索路径:
set search_path to app,public;

此时,如果我们再创建新表而不指定模式名称时,默认会在模式 app 中创建
官网模式的介绍

修改表

--创建产品表products
create table products(product_no integer primary key,name text,price numeric
);

添加字段

alter table 表名 add column 列名 数据类型 列约束;
-- 表products添加列description 
-- 对于表中已有的数据,新增加的列将会使用默认值进行填充;如果没有指定 DEFAULT 值,
-- 使用空值填充
-- 添加字段时还可以定义约束。不过需要注意的是,如果表中已经存在数据,新增字段的默认
-- 值有可能会违反指定的约束
alter table products add column description text;

在这里插入图片描述
以上语句出错的原因在于新增的字段 notes 存在非空约束,但是对于已有的数据该字段的值
为空

解决方法如下:

  1. 添加约束的同时指定一个默认值
  2. 添加字段时不指定约束,将所有数据的字段值手动填充(UPDATE)之后,再添加约束
alter table products add column notes text default 'new product' not null;
select * from products;

在这里插入图片描述

删除字段

alter table 表名 drop column 列名;
--产品表中的 notes 字段删除:
alter table products drop column notes;

删 除 字 段 后 , 相 应 的 数 据 也 会 自 动 删 除 。 同 时 , 该 字 段 上 的 索 引 或 约 束
也会同时被删除。但是,如果该字段被其他对象(例如外键引用、视图、存储过程等)引用,无法直接删除
在 drop 的最后加上 cascade 选项即可级联删除依赖的对象

添加约束

alter table  表名 add 表级别约束;
alter table products add constraint products_price_min check(price > 0);
-- 非空约束语法
alter table 表名 alter column 列名 set not null;
--将产品表的 name 字段设置为非空
-- 添加约束时,系统会检验已有数据是否满足条件,如果不满足将会添加失败。
alter table products alter name set not null;

删除约束

alter table 表名 drop constraint 约束名称 [ restrict | cascade ];

restrict 是默认值,如果存在其他依赖于该约束的对象,需要使用 cascade 执行级联
删除。例如,外键约束依赖于被引用字段上的唯一约束或主键约束。

--删除非空约束也需要使用单独的语法:
alter table 表名 alter column 列名 drop not null;
--删除产品表 name 字段上的非空约束
alter table products alter name drop not null;

修改字段默认值

--如果想要为某个字段设置或者修改默认值,可以使用以下语句:
alter table 表名 alter column 列名 set default 默认值;
--为产品表的价格设置一个默认值alter table products alter column price set default 7.77;
--删除已有的默认值
alter table 表名 alter column 列名 drop default;
--删除已有的默认值
-- 删除字段的默认值相当于将它设置为空值(NULL)。
alter table products alter column price drop default;

修改字段数据类型

-- 通常来说,可以将字段的数据类型修改为兼容的类型。
alter table 表名 alter column 列名 type 新的数据类型;
-- 修改表products的列price的类型为numeric
alter table products alter column price type numeric(10,2);
--已有的数据能够隐式转换为新的数据类型,如果无法执行隐式转换(例如将字符串‘1’转换为数字 1),
--可以使用 using 执行显式转换
alter table 表名 alter column 列名 type 新的数据类型 using
expression;
--我们先为产品表增加一个字符串类型的字段 level,然后将其修改为整数类型。
alter table products add column level varchar(10);--修改字段level为整数类型alter table products alter column level type integer using
level::integer;

重命名字段

alter table 表名 rename column 旧的列名 to 新的列名;

重命名表

alter table 旧的表名 rename to 新的表名;

删除表

drop tale官网介绍

DROP TABLE [ IF EXISTS ] name [ CASCADE | RESTRICT ];

name 表示要删除的表;如果使用了 IF EXISTS,删除一个不存在的表不会产生错误,
而是显示一个信息
如果被删除的表存在依赖于它的视图或外键约束,需要指定 CASCADE 选项执行级联删除。

相关文章:

postgresql-管理数据表

postgresql-管理数据表 创建表数据类型字段约束表级约束模式搜索路径 修改表添加字段删除字段添加约束删除约束修改字段默认值修改字段数据类型重命名字段重命名表 删除表 创建表 在 PostgreSQL 中,使用 CREATE TABLE 语句创建一个新表: CREATE TABLE …...

Llama2-Chinese项目:3.1-全量参数微调

提供LoRA微调和全量参数微调代码&#xff0c;训练数据为data/train_sft.csv&#xff0c;验证数据为data/dev_sft.csv&#xff0c;数据格式如下所示&#xff1a; "<s>Human: "问题"\n</s><s>Assistant: "答案举个例子&#xff0c;如下所…...

蓝桥等考Python组别十级001

第一部分:选择题 1、Python L10 (15分) 已知s = Hello!,下列说法正确的是( )。 s[1]对应的字符是Hs[2]对应的字符是ls[-1]对应的字符是os[3]对应的字符是o正确答案:B 2、Python L10 (15分) 运行下面程序,输入字符串“Banana”,输出的结果是&#x...

记录 Git 操作时遇到的问题及解决方案

目录 问题&#xff1a;git pull 时报错报错内容&#xff1a; ! [rejected] v1.0.3 -> v1.0.3 (would clobber existing tag)原因&#xff1a;本地 Git 仓库中已经存在名为 v1.0.3 和 v1.0.6 的标签了&#xff0c;而尝试从远程仓库&#xff08;GitHub&#xff09;拉取这些标签…...

第一届“龙信杯”电子数据取证竞赛Writeup

目录 移动终端取证 请分析涉案手机的设备标识是_______。&#xff08;标准格式&#xff1a;12345678&#xff09; 请确认嫌疑人首次安装目标APP的安装时间是______。&#xff08;标准格式&#xff1a;2023-09-13.11:32:23&#xff09; 此检材共连接过______个WiFi。&#x…...

Vue与React//双绑问题

Vue和React是两个目前最流行的前端框架&#xff0c;它们有一些区别主要区别如下&#xff1a; 响应式原理&#xff1a;Vue使用基于模板的方式进行双向绑定&#xff0c;其中使用了Vue自己实现的响应式系统。Vue能够通过追踪数据的依赖关系&#xff0c;自动更新DOM元素。而React采…...

信息安全第四周

社会工程学 社会工程学主要研究如何操纵人的心理和情感来获取机密信息或其他目标。它主要不是通过技术手段攻击计算机系统&#xff0c;而是通过心理学和人际交往技巧来欺骗人&#xff0c;使他们泄露密码、安全代码或其他敏感信息。社会工程学主要是一种安全风险&#xff0c;主要…...

机器学习基础概念与常见算法入门【机器学习、常见模型】

机器学习基础概念与算法 机器学习是计算机科学领域的一个分支&#xff0c;它致力于让计算机系统具备从数据中学习和改进的能力&#xff0c;而不需要显式地进行编程。与传统编程相比&#xff0c;机器学习有着根本性的不同之处。 机器学习与传统编程的不同 传统编程&#xff1…...

移动端 [Android iOS] 压缩 ECDSA PublicKey

移动端 [Android & iOS] 压缩 ECDSA PublicKey AndroidiOS 使用 Android KeyStore 和 iOS 的 Secure Enclave 提供的安全能力使用 P-256 来对 API 请求进行签名&#xff0c;服务器端再进行验证。 但是发现不论是 iOS 还是安卓都没有提供一个便捷的方式从 iOS 的SecKeyCopyE…...

Spring的配置Bean的方式

在Spring框架中&#xff0c;配置Bean有三种主要方式&#xff1a;自动装配、基于Java的显式配置和基于XML的显式配置。 1、自动装配&#xff1a; 自动装配是Spring容器根据Bean之间的依赖关系&#xff0c;自动将需要的Bean注入到目标Bean中。这是一种非常简便和快捷的配置方式&…...

安防监控/视频汇聚平台EasyCVR云端录像不展示是什么原因?该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…...

毛玻璃态登录表单

效果展示 页面结构组成 通过上述的效果展示可以看出如下几个效果 底部背景有三个色块并且效果是毛玻璃效果登录表单是毛玻璃效果登录表单的周围的小方块也是有毛玻璃效果并且与登录表单有层次效果 CSS3 知识点 filter 属性backdrop-filter 属性绝对定位属性动画属性 底部背…...

Java:使用 Graphics2D 类来绘制图像

目录 过程介绍创建一个 BufferedImage 对象创建一个 Graphics2D 对象绘制字符和干扰线将生成的图像保存到文件 示例代码 过程介绍 创建一个 BufferedImage 对象 首先创建一个 BufferedImage 对象来表示图像 创建一个 Graphics2D 对象 然后使用 createGraphics() 方法创建一…...

VUE2项目:尚品汇VUE-CLI脚手架初始化项目以及路由组件分析(一)

标题 环境VUE2目录publicassetscomponentsmain.jsbabel.config.jspackage.jsonvue.config.js 项目路由分析Header与Footer非路由组件完成Header示例 路由组件的搭建声明式导航编程式导航 Footer组件的显示与隐藏路由传递参数重写push和replace三级联动组件拆分附件 环境 前提要…...

输入网址input,提取标题和正文

https://m.51cmm.com/wz/WZnKubw1.html?share_token715beaff-33ef-466b-8b6c-092880b9a716&tt_fromcopy_link&utm_sourcecopy_link&utm_mediumtoutiao_android&utm_campaignclient_share - 【科学决策七步骤 - 希律心理】 - 今日头条 提取标题和正文input输…...

docker--redis容器部署及与SpringBoot整合

1. 容器化部署docker 拉取镜像创建数据目录data 及 配置目录conf创建配置文件redis.conf启动redis容器进入容器,进行Redis操作设置为自启动:docker update redis --restart=alwaysdocker pull redis:5.0.12docker run -d --rm --name my_redis -p 6379:6379 -v D:/docker/red…...

数据库:Hive转Presto(二)

继续上节代码&#xff0c;补充了replace_func函数&#xff0c; import re import os from tkinter import *class Hive2Presto:def __int__(self):self.t_funcs [substr, nvl, substring, unix_timestamp] \[to_date, concat, sum, avg, abs, year, month, ceiling, floor]s…...

docker安装apisix全教程包含windows和linux

docker安装apisix 一、Windows安装1、首先需要安装docker和docker compose&#xff0c;如果直接安装docker desktop&#xff0c;会自动安装docker compose。2、重新启动电脑3、访问 Docker 的下载&#xff08;[https://www.docker.com/products/docker-desktop](https://www.do…...

【C++进阶】:C++11

C11 一.统一列表的初始化1.{}初始化2.initializer_list 二.声明1.decltype2.nullptr 三.右值引用和移动语义1.左值和右值1.转义语句2.完美转发 四.可变参数模板1.基本概念2.STL里emplace类接口 五.lambda表达式六.新的类功能 一.统一列表的初始化 1.{}初始化 在C98中&#xf…...

9.30消息队列实现进程之间通信方式代码,现象

服务端 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)typedef struct{ long msgtype; //消息类型char data[1024]; //消息正文 }Msg;#define SIZE sizeof(Msg)-sizeof(long)int main(int argc…...

保姆级教程:在ROS2 Humble/Foxy的Gazebo中配置RGB-D相机(附解决点云颜色/坐标问题)

ROS2 Humble/Foxy中Gazebo深度相机仿真全攻略&#xff1a;从配置到点云问题解决在机器人仿真开发中&#xff0c;深度相机&#xff08;RGB-D&#xff09;是不可或缺的传感器之一。它能够同时提供彩色图像和深度信息&#xff0c;为SLAM、物体识别、避障等任务提供关键数据支持。本…...

告别拍脑袋规划!用ArcGIS做绿道选线:如何科学量化坡度、水域、道路成本并加权计算

科学规划绿道的ArcGIS高阶技法&#xff1a;从成本栅格构建到最优路径生成绿道规划从来不是简单的"两点之间直线最短"&#xff0c;而是需要综合考虑地形、生态、人文等多维因素的复杂决策过程。传统规划中常见的"拍脑袋"决策方式&#xff0c;往往导致建成后…...

3步深度解锁:网络设备权限管理工具的实战手册

3步深度解锁&#xff1a;网络设备权限管理工具的实战手册 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 你是否曾面对功能受限的网络设备感到束手无策&#xff1f;当默认配置锁死了硬…...

PCL 法向量夹角剔除错误匹配点对【2026最新版】

目录 一、 算法简介 1、主要函数 2、参考文献 二、 代码实现 三、 结果展示 四、 参考链接 博客长期更新,本文最新更新时间为:2026年5月24日。代码在PCL1.15.1中测试通过 一、 算法简介 在三维点云配准中,对应点(correspondence)的准确性直接决定了配准算法的精度和鲁棒性…...

【数据结构与算法】数据结构基础——栈和队列

目录栈和队列1. 栈1.1 栈的概念1.2 栈的实现方式分析1.3 栈的实现1.3.1 栈的初始化与销毁1.3.2 入栈与出栈1.3.3 栈的判空与有效元素个数1.3.4 栈顶元素1.4 栈的扩展1.4.1 两栈共享空间2. 队列2.1 队列的概念2.2 队列的实现方式分析2.3 队列的实现2.3.1 队列的初始化与销毁2.3.…...

UE4SS终极指南:从零开始掌握虚幻引擎脚本系统

UE4SS终极指南&#xff1a;从零开始掌握虚幻引擎脚本系统 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS UE4S…...

学了几天 Web 安全,终于搞懂什么是 XSS 了

xss的详细介绍最近开始正式学习 Web 安全。前面陆续学了&#xff1a;HTTPCookieSessionJWT RBAC然后发现很多地方都会提到一个东西&#xff1a;XSS以前一直感觉这个漏洞很抽象。网上很多文章一上来就是&#xff1a;<script>alert(1)</script>然后说&#xff1a;“弹…...

独立开发者利用taotoken模型广场为不同任务选择性价比最优模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者利用taotoken模型广场为不同任务选择性价比最优模型 对于独立开发者而言&#xff0c;在有限的预算内高效完成多样化的开…...

避坑指南:Unity中AABB碰撞检测失效的5种常见原因及解决方法

Unity中AABB碰撞检测失效的深度排查与解决方案在Unity开发中&#xff0c;AABB&#xff08;轴对齐包围盒&#xff09;碰撞检测是基础但容易出问题的环节。许多开发者都遇到过这样的情况&#xff1a;明明逻辑正确&#xff0c;测试时却出现物体穿透、碰撞时有时无等诡异现象。本文…...

Lovable内部工具开发方法论(从需求黑洞到用户自发推广的完整闭环)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Lovable内部工具开发方法论&#xff08;从需求黑洞到用户自发推广的完整闭环&#xff09; Lovable 方法论的核心不是交付功能&#xff0c;而是培育“工具依赖感”——当一线工程师在凌晨三点调试线上问题时&am…...