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与数据一起复制。
答案 0 :(得分:6)
在 PostgreSQL 中您正在寻找的功能is in
CREATE TABLE tablename
(LIKE parent_table INCLUDING CONSTRAINTS) /* other options too */
据我所知, CREATE TABLE AS
可以与完全任意的SELECT
一起使用,而PG不会检查这是否只涉及一个表,更不用说尝试推断约束了。