在PostgreSQL中CREATE TABLE AS SELECT

时间:2011-10-12 11:41:39

标签: postgresql

PostgreSQL中的

CREATE TABLE AS SELECT语句不会创建包含原始表的NOT NULL约束的列的新表。

我的表格tab1有col1和col2,没有空约束。

create table tab1 (col1 varchar(23) not null, col2 int not null)

现在我正在创建一个新表tab2,其中包含表tab2的定义和数据,如下所示:

创建表格tab2作为选择col1,col2来自tab1

但是tab2的col1和col2没有NOT NULL约束。如何从原始表中的新表列中获取确切的NOT NULL约束状态?

如果有任何方法可以使用非常感谢的CREATE TABLE AS SELECT语句来实现此目的。 Oracle,DB2中的CREATE TABLE AS SELECT语句和SQLServer中的SELECT .. INTO语句将NOT NULL CONSTRAINT与数据一起复制。

1 个答案:

答案 0 :(得分:6)

PostgreSQL 中您正在寻找的功能is in

CREATE TABLE tablename 
(LIKE parent_table INCLUDING CONSTRAINTS) /* other options too */ 
据我所知,

CREATE TABLE AS可以与完全任意的SELECT一起使用,而PG不会检查这是否只涉及一个表,更不用说尝试推断约束了。