簡體   English   中英

如何將 pg_dump 的輸出恢復為新的表名

[英]How to restore output from pg_dump into a new table name

我正在傾倒一個像這樣的大型 Postgres 表:

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

上面創建了一個mytable.dump文件。 我現在想將此轉儲恢復到一個名為mytable_restored的新表中。

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

沒有用於重命名表的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';

我的回答可能不是問題的確切答案,但對於我的情況(包含許多表的目錄轉儲),我改進了 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'

您可以將 sed 附加到您的 pg_dump 中,這樣當 pg_dump 輸出表名時,sed 會將其替換為正確的名稱。

pg_dump mytable mydb | sed 's/mytable/mytable_restored/g' > mytable_restored.dump

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM