有没有一种方法可以将一个表的结构复制到一个新的表中,而不需要数据,包括所有的键和约束?
看看 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:
psql
begin work; \i /tmp/temp.sql
这样,只要一切都好,我:
commit
游戏结束了!