2011-10-12 181 views
3

在postgres sql中創建表爲select在表上刪除非空限制。創建表,因爲select是在postgresql中刪除非空限制

例如:

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

請讓我知道如何表數據,以及限制複製的Postgres。

回答

6

對此沒有單一命令解決方案。

要創建基於現有的,包括所有的約束,使用表:

create table B (like a including constraints); 

一旦你這樣做,你可以從舊的數據複製到新的一個:

insert into b 
select * from a; 

如果您在單個事務中執行此操作,它看起來像連接到數據庫的所有其他會話的原子操作。

0

非常詳細的,並很好地解釋教程PostgreSQL中創建表命令9.1

http://www.postgresql.org/docs/current/static/sql-createtable.html

非空約束總是被複制(如果通過給父表的參考在創建表命令創建表),甚至用包括約束,只有檢查約束將被複制。

+0

我將鏈接替換爲發佈版本的「官方」手冊。它包含相同的信息。 –