将表结构复制到新表中

时间:2009-08-03 02:16:19

标签: sql postgresql

有没有办法将表的结构复制到新表中,没有数据,包括所有键和约束?

4 个答案:

答案 0 :(得分:63)

嗯,最接近SQL的是:

create table new (
    like old
    including defaults
    including constraints
    including indexes
);

但它不会复制一切。缺少的最重要的东西是FOREIGN KEYs。此外 - 也不会复制触发器。不确定其他事情。

另一种方法是转储表结构,在转储中更改它的名称,然后再次加载它:

pg_dump -s -t old databases | sed 's/old/new/g' | psql

但要注意,这种简单的sed也会在其他地方将旧的更改为新的(例如,如果你的表列中名为“is_scolded”,它将变为“is_scnewed”)。

问题实际上是:为什么你需要它 - 因为出于各种目的,我会使用不同的技术。

答案 1 :(得分:62)

对于简单的模式副本,请使用like子句。

CREATE TABLE new_table_name ( like old_table_name including all)

答案 2 :(得分:11)

看看pgAdmin - 到目前为止最简单的方法来做你想做的事 右键单击表,脚本 - 创建。

答案 3 :(得分:9)

要完全复制表,还可以使用使用TABLE命令的缩写形式:

CREATE TABLE films2 AS
    TABLE films
    WITH NO DATA;

更多详细信息here