基本CREATE table用于手动定义表结构,如users表含主键、非空和默认值;2. CREATE TABLE AS根据查询结果创建表,如导出active_users数据但不复制约束;3. 临时表用TEMPORARY关键字创建,会话级可见且断开自动清除,适合中间计算;4. 继承表通过INHERITS复用父表结构,如capitals继承cities字段。根据不同场景选择合适方式可提升postgresql使用效率。

在 PostgreSQL 中,创建表有多种方式,主要取决于使用场景和需求。以下是几种常见的建表方法,适用于不同情况下的数据定义操作。
1. 基本 CREATE TABLE 语句
这是最常见的方式,使用标准 SQL 语法手动定义表结构。
- 指定表名、字段名、数据类型、约束(如主键、非空、唯一等)
- 适合从零开始设计表结构
示例:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, created_at TIMESTAMP DEFAULT NOW() );
2. 基于查询结果创建表(CREATE TABLE AS)
通过 select 查询的结果集自动创建表结构,常用于数据导出、备份或中间表生成。
- 新表包含查询中的列和数据
- 不会自动复制源表的约束(如主键、索引、默认值等)
- 适合快速提取数据子集
示例:
CREATE TABLE active_users AS SELECT * FROM users WHERE status = 'active';
3. 创建临时表(TEMPORARY 或 TEMP)
用于会话期间的中间计算,数据仅当前连接可见,断开后自动清除。
- 临时表只在当前会话中存在
- 可与永久表同名,优先访问临时表
- 适合复杂查询中的缓存处理
示例:
CREATE TEMP TABLE temp_user_stats ( user_id INT, login_count INT, last_login TIMESTAMP );
4. 继承表(INHERITS)
PostgreSQL 支持表继承,新表可以继承已有表的字段结构。
- 子表自动拥有父表的所有列
- 支持多表查询时联合检索
- 注意:INSERT 默认只写入指定表,除非使用 ONLY
示例:
CREATE TABLE cities ( name VARCHAR(100), population INT, altitude INT ); <p>CREATE TABLE capitals ( state CHAR(2) ) INHERITS (cities);
基本上就这些常用方式。根据实际需要选择合适的方法,比如日常建模用第一种,数据分析导出用第二种,会话级中间数据用临时表,结构复用考虑继承。每种方式都有其适用边界,理解清楚能更好发挥 PostgreSQL 的灵活性。