如何将pg_dump的输出恢复到新的表名

时间:2019-05-20 20:20:14

标签: postgresql pg-restore

我正在像这样转储大型Postgres表:

pg_dump -h myserver  -U mt_user --table=mytable  -Fc -Z 9 --file mytable.dump mydb

上面创建了一个mytable.dump文件。我现在想将此转储还原到名为mytable_restored的新表中。

如何使用pg_restore命令执行此操作?

2 个答案:

答案 0 :(得分:0)

没有pg_restore选项来重命名表。

我会这样:

-- create a table that is defined like the original
CREATE TABLE mytable_restored (LIKE mytable INCLUDING ALL);

-- copy the table contents
COPY mytable TO '/tmp/mytable.dmp';
COPY mytable_restored FROM '/tmp/mytable.dmp';

答案 1 :(得分:0)

我的答案可能不是该问题的确切答案,但是对于我的情况(包含许多表的目录转储),我改进了Laurenz的答案,这可能很有用。
就我而言,我只需要两个表即可还原到另一个位置。 首先,我在新位置创建了表。 我在toc.dat文件中找到表数据。

pg_restore -Fd <dir_name> -l | grep <table_name> 

这可能返回的不仅仅是一行。然后,我们寻找“ TABLE DATA”行。在获得[file_number] .dat.gz文件并将其用于复制命令(如以下psql中)后。

COPY <table_name> from PROGRAM 'zcat /<path>/<file_number>.dat.gz'