postgresql创建表的基础语法
在postgresql中创建表使用CREATE TABLE语句,最基础的语法结构如下,用户可以根据自身需求调整表名和字段定义:
-- 基础建表语法
CREATE TABLE 表名 (
字段名1 数据类型 [约束],
字段名2 数据类型 [约束],
...
[表级约束]
);
常用的字段数据类型
建表时需要为字段指定合适的数据类型,postgresql常用的数据类型如下:
- 整数类型:INT、BIGINT、SMALLINT,分别适配不同范围的整数存储需求
- 字符串类型:VARCHAR(n)可变长度字符串、TEXT无长度限制文本、CHAR(n)固定长度字符串
- 日期时间类型:DATE存储日期、TIMESTAMP存储日期时间、TIME存储时间
- 浮点类型:FLOAT、NUMERIC(p,s)精确小数,NUMERIC适合存储金额等需要精确计算的数值
- 布尔类型:BOOLEAN,存储true或false值
常用约束说明
约束用于保证表中数据的完整性和准确性,常用的约束类型如下:
| 约束名称 | 作用 |
|---|---|
| PRIMARY KEY | 主键约束,唯一标识表中的每一行,值不能重复也不能为空 |
| NOT NULL | 非空约束,字段值不能为空 |
| UNIQUE | 唯一约束,字段值不能重复,但可以为空 |
| CHECK | 检查约束,限制字段值的范围,比如年龄必须大于0 |
| DEFAULT | 默认值约束,插入数据时如果未指定该字段的值,自动填充默认值 |
创建表的完整示例
示例1:创建简单的用户表
下面的示例创建一个存储用户基础信息的表,包含用户id、用户名、注册时间三个字段:
-- 创建用户表
CREATE TABLE user_info (
user_id INT PRIMARY KEY, -- 用户id,主键
user_name VARCHAR(50) NOT NULL, -- 用户名,非空
register_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 注册时间,默认当前时间
);
示例2:创建带复杂约束的订单表
下面的示例创建一个订单表,包含订单id、用户id、订单金额、订单状态等字段,同时添加外键关联用户表:
-- 创建订单表
CREATE TABLE order_info (
order_id BIGINT PRIMARY KEY, -- 订单id,主键
user_id INT NOT NULL, -- 用户id,非空
order_amount NUMERIC(10,2) CHECK (order_amount > 0), -- 订单金额,必须大于0
order_status VARCHAR(20) DEFAULT '待支付', -- 订单状态,默认待支付
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间,默认当前时间
-- 外键约束,关联user_info表的user_id
FOREIGN KEY (user_id) REFERENCES user_info(user_id)
);
创建表的后续验证操作
表创建完成后,可以通过以下方法验证表是否创建成功:
查看表结构
使用d 表名命令可以查看表的详细结构,包括字段名、数据类型、约束等信息:
-- 查看user_info表的结构 d user_info
查看所有表
使用dt命令可以查看当前数据库中的所有表,确认新建的表是否在列表中:
-- 查看所有表 dt
创建表的常见注意事项
- 表名和字段名建议遵循小写加下划线的命名规范,避免和postgresql的关键字冲突
- 如果表已经存在,直接执行CREATE TABLE语句会报错,可以加上IF NOT EXISTS避免错误:
-- 如果表不存在才创建 CREATE TABLE IF NOT EXISTS user_info ( user_id INT PRIMARY KEY, user_name VARCHAR(50) NOT NULL ); - 外键关联的字段必须是被关联表的主键或者唯一约束字段,否则外键创建会失败
- 创建表时如果指定了模式(schema),需要保证当前用户有对应模式的创建表权限
如果创建表时出现权限不足的错误,需要联系数据库管理员授予当前用户对应数据库的CREATE权限。
postgresql创建表CREATE_TABLE表结构修改时间:2026-06-22 04:10:01