PostgreSQL 中的
CREATE TABLE AS SELECT
语句不会使用具有原始表的 NOT NULL
约束的列创建新表。
我的表 tab1 的 col1 和 col2 没有空约束。
创建表 tab1(col1 varchar(23) 不为空,col2 int 不为空)
现在我正在创建一个新表 tab2,其中包含表 tab2 的定义和数据,如下所示:
create table tab2 as select col1,col2 from tab1
但是 tab2 的 col1 和 col2 没有 NOT NULL 约束。如何在原始表的新表列中获取确切的 NOT NULL 约束状态?
如果有任何方法可以使用 CREATE TABLE AS SELECT
语句实现此目的,我们将不胜感激。 Oracle、DB2 中的 CREATE TABLE AS SELECT
语句和 SQLServer 中的 SELECT .. INTO
将 NOT NULL CONSTRAINT 与数据一起复制。
最佳答案
在 PostgreSQL 中您正在寻找的功能 is in
CREATE TABLE tablename
(LIKE parent_table INCLUDING CONSTRAINTS) /* other options too */
CREATE TABLE AS
,据我所知,可以与完全任意的 SELECT
一起使用,PG 不会检查这是否只涉及一个表,更不用说尝试了推断约束。
关于postgresql - 在 PostgreSQL 中创建表作为选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739521/