跳到主要内容

PostgreSQL CREATE TABLE 建表教程

CREATE TABLE 定义表结构:列名、数据类型、默认值与约束。本篇覆盖基本建表、从查询结果建表与临时表。

本篇内容​

  • CREATE TABLE 基本语法
  • 列类型、DEFAULT 与内联约束
  • IF NOT EXISTS 与临时表
  • CREATE TABLE AS / SELECT INTO 从查询建表

基本建表​

CREATE TABLE users (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
age INTEGER CHECK (age >= 0 AND age < 150),
status SMALLINT NOT NULL DEFAULT 1,
create_time TIMESTAMPTZ NOT NULL DEFAULT now()
);

幂等与临时表​

-- 已存在时不报错
CREATE TABLE IF NOT EXISTS users (
id BIGINT PRIMARY KEY,
name VARCHAR(50)
);

-- 临时表:只在当前会话可见,会话结束自动删除
CREATE TEMP TABLE tmp_users AS
SELECT * FROM users WHERE status = 1;

从查询结果建表​

-- 结构 + 数据一起复制
CREATE TABLE users_backup AS
SELECT * FROM users;

-- 只复制结构(加一个永假条件)
CREATE TABLE users_template AS
SELECT * FROM users WITH NO DATA;
待补充(TODO)
  • 补充:数据类型选型建议(VARCHAR 长度、整数类型、时间类型)
  • 补充:约束写在列上 vs 表级的区别与复合主键写法
  • 补充:继承表 / 分区表 / UNLOGGED 表的适用场景
  • 补充:建表规范(命名、主键选择、时间字段、软删除列)