在Postgres中复制/克隆表的最快方法是什么?

时间:2016-08-30 13:25:55

标签: postgresql

我知道我可以做CREATE TABLE tbl_2 AS (select * from tbl_1)

但有更好/更快/更强的方法吗?我说的是性能而不是其他任何东西。这些表都是非规范化的,我没有任何外键约束需要担心。

修改

可能没有更好的方法吗?参考:https://dba.stackexchange.com/questions/55661/how-to-duplicate-huge-postgres-table

2 个答案:

答案 0 :(得分:1)

更好的方法实际上取决于你希望完成的目标。

如果要保留原始表中的所有约束和索引,可以使用LIKE语句中的CREATE TABLE子句,如下所示:

CREATE TABLE tbl_2 (LIKE tbl_1 INCLUDING INDEXES INCLUDING CONSTRAINTS);

但这只会创建一个空表。您仍然需要复制数据。

答案 1 :(得分:0)

或者,您可以使用以下内容:

$ pg_dump -t tbl_1 | sed -e 's/^SET search_path = .*$/SET search_path = tmpschema, pg_catalog;' > table.sql
$ psql -d test -c 'CREATE SCHEMA tmpschema'
$ psql -1 -d test -f table.sql
$ psql -d test -c 'ALTER TABLE tmpschema.tbl_1 RENAME TO tbl_2; ALTER TABLE tmpschema.tbl_2 SET SCHEMA public; DROP SCHEMA tmpschema'

也许它不比CREATE TABLE ... AS (SELECT ...)快,但它也会复制所有索引和约束。