将表结构复制到新表中

有没有一种方法可以将一个表的结构复制到一个新的表中,而不需要数据,包括所有的键和约束?

119452 次浏览

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

那么,最接近 SQL 的是:

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

但它不会复制所有东西。缺少的最重要的东西是外键。也不复制同样触发器。其他的我就不知道了。

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

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

但是要注意,这种过于简单化的 sed 在其他地方也会将 old 变为 new (例如,如果您的表列中有名为“ is _ scoded”的列,那么它将变为“ is _ scnewed”)。

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

对于简单的架构复制,请使用 like 子句。

CREATE TABLE new_table_name (LIKE old_table_name INCLUDING ALL);

怎么样

CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)

Postgreql.org 回答

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

CREATE TABLE films2 AS
TABLE films
WITH NO DATA;

更多细节 给你

我通常这样做:

pg_dump dbname -s -t table_to_clone > /tmp/temp.sql

比 sed 或 vim 文件更改表名和相关内容。通常足以用 Table _ new _ name代替 Table _ to _ 

在创建时,我通常使用表名称索引和触发器作为前缀,因此此时我没有其他事情要做了。

现在,来自 psql:

begin work;
\i /tmp/temp.sql

这样,只要一切都好,我:

commit

游戏结束了!