创建表作为select是在postgresql中删除非空约束

ama*_*mar 3 sql

在postgres sql中创建表作为select删除了表上的not null约束.

例如 :

create table A (char a not null);
create table B as select * from a;
select * from B;-- no constraint is copied from A table
Run Code Online (Sandbox Code Playgroud)

请告诉我如何复制表格数据以及postgres中的约束.

a_h*_*ame 7

没有单一命令解决方案.

要基于现有表创建表,包括所有约束,请使用:

create table B ( like a including constraints);
Run Code Online (Sandbox Code Playgroud)

完成后,您可以将旧数据复制到新数据:

insert into b
select * from a;
Run Code Online (Sandbox Code Playgroud)

如果在单个事务中执行此操作,则它看起来像是连接到数据库的所有其他会话的原子操作.