PostgreSQL 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。 CREATE TABLE AS SELECT 语句 CREATE TABLE AS SELECT 语句可以用于复制表结构和数据,但是不会复制索引
PostgreSQL 提供了多种不同的复制表的方法,它们的差异在于是否需要复制表结构或者数据。 CREATE TABLE AS SELECT 语句CREATE TABLE AS SELECT 语句可以用于复制表结构和数据,但是不会复制索引。 我们可以使用以下语句基于 employee 复制一个新表 emp2,包括表中的数据:
如果只想要复制表结构,不复制数据,可以增加 WITH NO DATA 子句:
或者也可以使用一个不返回任何结果的查询语句,例如:
这种复制方法不会创建任何索引或者约束,例如主键、外键以及 NOT NULL 约束等。 CREATE TABLE LIKE 语句CREATE TABLE LIKE 语句也可以用于复制表结构:
语法中的括号是必不可少的,而且这种方法不会复制数据,但是会复制字段的 NOT NULL 约束。 CREATE TABLE AS TABLE 语句CREATE TABLE AS TABLE 语句可以复制表结构和数据,例如:
这种语法不会复制索引、外键以及非空约束等。 如果不需要复制数据,可以使用 WITH NO DATA 子句:
SELECT INTO 语句SELECT INTO 语句可以复制表结构和数据,但是不包含索引等。例如:
PostgreSQL 推荐使用 CREATE TABLE AS 替代 SELECT INTO 语句实现类似效果,因为前者适用性更广,功能更全。 CREATE TABLE INHERITS 语句PostgreSQL 支持 CREATE TABLE 语句的 INHERIT 子句,用于继承表结构。这种复制表的方法和其他方法有所区别,任何针对父表的修改通常也会自动修改子表。 另外,这种方法还可以为子表定义额外的字段。例如:
其中,notes 是我们额外定义的字段,其他字段继承 employee。 使用 psql \d 命令查看 emp5 的结构如下:
|
2022-02-26
2022-11-24
2022-09-22
2022-09-18
2022-09-22