postgresql-管理数据表

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_pk
 primary key (employee_id)
 , constraint emp_salary_min
 check (salary > 0)
 , constraint emp_email_uk
 unique (email)
 , constraint emp_dept_fk
 foreign key (department_id)
 references departments(department_id)
 , constraint emp_manager_fk
 foreign 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默认值全解析:教你轻松玩转write_date字段 在上期内容中,我们深入探讨了。 阅读详情

相关推荐

《PostgreSQL开发指南》第06篇 管理数据表

在关系型数据库中,用于存储数据的对象主要是表(table)。在上一篇中,我们已经了解到,表包含在模式中,模式包含在数据库中。接下来我们介绍如何管理数据库中的表,包括创建表、修改表以及删除表等操作。

Tony.Dong的专栏 1922

PostgreSQL设置字段默认值

--为表my_table 添加gid字段,设置默认值为1 ALTER TABLE my_table ADD COLUMN gid INTEGER DEFAULT 1; --修改my_table 的gid 字段默认值为2 ALTER TABLE my_table ALTER COLUMN gid SET DEFAULT 2; --删除my_table的gid字段的默认值 ALTER TABLE my_table ALTER COLUMN gid DROP DEFAULT; --删除字段 alter

荷塘月色 1万+

Windows下用Docker部署RagFlow的5个常见错误及解决方法(附详细日志分析)

本文针对Windows系统下使用Docker部署RagFlow的常见难题,提供了详细的避坑指南。文章深度剖析了WSL2配置、端口冲突、文件权限、资源限制及网络通信这五个典型错误场景,并结合具体日志分析,给出了经过验证的解决方案,帮助开发者高效完成部署。

weixin_29233857的博客 178

Postgresql更改字段默认值、设置字段默认值、删除字段默认值

【代码】Postgresql更改字段默认值、设置字段默认值、删除字段默认值。

weixin_42064877的博客 5830

从《新程序员》系列看程序员职业发展趋势与成长路径

在信息技术日新月异的当下,软件开发行业蓬勃发展,程序员作为行业的核心力量,其成长与发展路径备受瞩目。《新程序员》系列杂志应运而生,以其前瞻性的视角、丰富多元的内容,为广大程序员尤其是新程序员提供了洞察行业趋势、学习前沿技术、汲取前辈经验的宝贵窗口。该系列杂志由优快云精心打造,自推出以来,便在开发者群体中引发了强烈反响。《新程序员》系列内容涵盖了从基础技术知识的深入解读,到行业前沿趋势的精准预测;从优秀开发者的成长历程分享,到各大企业数字化转型的实践案例剖析等多个维度。

AllenLV的博客 2254

GD32F303开发实战(一):从零搭建MDK工程与时钟配置详解

本文详细介绍了如何从零开始为GD32F303微控制器搭建一个清晰、可维护的MDK工程模板。内容涵盖开发环境准备、工程目录结构规划、文件分组管理、关键工程配置,并重点解析了时钟树原理,手把手指导配置108MHz系统时钟。通过实战步骤与常见问题排查,帮助开发者构建一个稳定可靠的开发基础,便于后续功能扩展。

weixin_29174141的博客 269

posgresql数据库中表字段批量添加默认值

背景:我的postgresql数据库中有一个模式,需要把这个模式下所有的表中字段类型为int2,in4,int8,numeric的字段默认值设置为0,通过编写存储过程的方式实现这一需求。

weixin_42101813的博客 1302

【AI实践】Dify调用本地和在线模型服务

Ollama可以本地部署模型,如何集成私有数据、如何外部应用程序对接,因此需要有一个应用开发框架。ip地址需要换成自己电脑的IP地址;模型名称需要和Ollama模型名称保持一致;docker是虚拟环境的主机,Ollama部署在本地主机,无法通过本机访问。找到Ollama,配置本地Ollama已经验证的模型,如phi3。在docker页面里面,也可以看到running。docker已经安装完成的情况下。,打开dify,注册登录后。在工作区选择调用即可。

AI_Gump的博客 4854

PostgreSQL15——管理数据表

以上语句出错的原因在于新增的字段 notes 存在非空约束,但是对于已有的数据该字段的值为空。除了表之外,其他的模式对象,例如索引、函数、类型等等,也遵循相同的原则。表级约束和字段约束类似,只不过它是基于整个表定义的约束,还能够为约束指定自定义的名称。不过需要注意的是,如果表中已经存在数据,新增字段的默认值有可能会违反指定的约束。删除约束通常需要知道它的名称,可以通过 psql 工具的\d table_name 命令查看表的约束。添加字段与创建表时的字段选项相同,包含字段名称、字段类型以及可选的约束。

吴声子夜歌的博客 955

DDR内存Prefetch机制详解:从DDR1到DDR4的技术演进与性能提升

本文深入解析DDR内存Prefetch机制从DDR1到DDR4的技术演进与性能提升。通过分析Prefetch技术的实现原理与Burst传输的协同机制,揭示DDR1的2n Prefetch、DDR2的4n Prefetch、DDR3的8n Prefetch以及DDR4的Bank Group架构创新如何显著提升内存带宽与系统性能。

weixin_30369041的博客 537

详解如何用爬虫工具批量采集阿里巴巴批发网商品数据

本文主要介绍如何使用后羿采集器的智能模式,免费采集阿里巴巴批发网商品的批发价格、发货时间、是否代发等信息。 采集字段: 商品标题、商品链接、图片链接、标签1、标签2、标签3、价格、30天成交数、 评价、店铺 功能点目录: 如何对采集字段进行配置 如何采集列表+详情页类型网页 采集结果预览: 下面我们来详细介绍一下如何免费采集1688批发网的商品数据,我们以“羽绒服女”为例,具体步骤如下: 步骤一...

weixin_43777427的博客 1万+

PostgreSQL数据表管理完全手册:pgweb创建、修改和删除表的终极技巧

pgweb是一款跨平台的PostgreSQL数据库客户端,专为简化数据库管理而设计。本文将详细介绍如何利用pgweb进行数据表的创建、修改和删除操作,帮助新手用户快速掌握PostgreSQL数据表管理的核心技能。 ## 1. 快速上手:pgweb的安装与连接 要开始使用pgweb,首先需要克隆项目仓库并进行安装。执行以下命令获取源码: ```bash git clone https://gi

gitblog_00619的博客 818

MATLAB基础应用精讲-【深度强化学习】SAC(Soft Actor-Critic)算法(附MATLAB和python代码实现)

Actor 网络:用于选择动作。Critic 1 和 Critic 2 网络:用于估计 Q 值。Target Critic 1 和 Target Critic 2:与 Critic 网络架构相同,用于生成更稳定的目标 Q 值。,即在保证探索的情况下选择高价值动作。软更新目标 Q 网络参数,使得目标网络参数缓慢向当前网络靠近,避免振荡。

qq_36130719的博客 454

一条命令把 Scrapling 交给 AI:这个免猜测抓取的 Agent 技能包怎么玩

让 AI Agent 写爬虫有个老大难问题:它"看不见"项目的当前文档,只能靠训练数据里可能已过时的知识去猜 API。Scrapling 在仓库里内置了一个官方 **Agent 技能包**(`agent-skill/` 目录),把几乎整个文档站封装成 Markdown 直接喂给 OpenClaw、Claude Code 等智能体,目标是让 Agent 从单次请求到全站爬取全程免猜测。这篇文章不重复

gitblog_01095的博客 700

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

|~~~热爱生活、努力学习的小伙汁~~~| 2106

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

postgresql实现对已有数据表分区处理的操作详解例子解析

在PostgreSQL中,对已有数据表进行分区处理可以提高数据管理的效率和查询性能。

IT老农民的博客 1532

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PostgreSQL 查看数据表对应的数据类型

select column_name,data_type from information_schema.columns where table_name = 'icustays'

越努力 越幸运 6413

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

基于Django+Vue的002-用设计学生成绩管理系统管理系统设计与实现【Python+PostgreSQL+SQLAlchemy完整源码】

开源免费分享基于Django+Vue的002-用设计学生成绩管理系统管理系统设计与实现【Python+PostgreSQL+SQLAlchemy完整源码】可提供说明文档 可以通过*AIGC**技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

qq5_910946292的博客 522

【2025最新】基于Django+Vue的宠物服务管理系统管理系统源码+SQLAlchemy+PostgreSQL

直接拿走,意外获得200多套代码,需要的滴我【2025最新】基于Django+Vue的宠物服务管理系统管理系统源码+SQLAlchemy+PostgreSQL(可提供说明文档(通过*AIGC*)

w707050的博客 498

POSTGRESQL基本操作

POSTGRESQL基本操作 1.查看当前存在哪些数据库:\l 或者 select * from pg_database; 2.创建数据库: create database 数据库名; 3..查看当前存在哪些用户:\du 或者 select * rolnam from pg_roles; 或者 select * from pg_authid; 4.创建用户 create user 用户名 或者 create role 角色名 或者 create user 用户名 with pa

qq_40300123的博客 478

摄影平台信息管理系统源码-Django后端+Vue前端+PostgreSQL【可直接运行】

摄影平台信息管理系统源码-Django后端+Vue前端+PostgreSQL【可直接运行】,拿走直接用(附源码,数据库,视频,可提供说明文档(通过*AIGC*)*技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

rxy1176073894的博客 987

基于Django+Vue的可视化学习系统管理系统设计与实现【Python+PostgreSQL+SQLAlchemy完整源码】

直接拿走,意外获得200多套代码,需要的滴我基于Django+Vue的可视化学习系统管理系统设计与实现【Python+PostgreSQL+SQLAlchemy完整源码】(可提供说明文档(通过*AIGC*)

yydYYDD的博客 720

PostgreSQL 基础语法:库、表、用户、权限管理

本文系统学习了 PostgreSQL 中库、表、用户、权限的基础管理语法。从创建到删除,从基础定义到约束关联,再到精细化的权限控制,这些操作构成了数据库管理的基石。

wuzuhuzhanlang的专栏 384

基于Django+Vue的农产品销售系统管理系统设计与实现【Python+PostgreSQL+SQLAlchemy完整源码】

基于Django+Vue的农产品销售系统管理系统设计与实现【Python+PostgreSQL+SQLAlchemy完整源码】,拿走直接用(附源码,数据库,视频,可提供说明文档(通过*AIGC*)*技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

yydYYDD的博客 632
上一篇: postgresql-数据库与模式
下一篇: postgresql-管理表空间
迷失的小鹿
博客等级 码龄8年 1万+粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值