[英]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.