簡體   English   中英

在 pg_restore 期間排除表

[英]Exclude Table during pg_restore

更新:能夠在 pg_dump 命令期間排除表中的數據。 比嘗試不加載數據更快,因為您不必等待數據被轉儲。

--exclude-table-data=event_logs

(PostgreSQL) 9.4.4

有人知道如何在執行pg_restore時排除表嗎? 我可以在執行pg_dump時找到如何做到這一點。 但是,我不是進行轉儲的人,也不能排除它們。

轉儲中有 2 個表,它們非常大,並且在我進行恢復時需要花費很長時間,所以我想跳過它們。

我有同樣的問題。 一個長表列表,我想從幾個表中排除數據。

我所做的是以下內容:

運行

pg_restore -l $pgdump_file > restore.pgdump.list

在編輯器中打開該restore.pgdump.list文件,並插入一個; 在行前說

;2429; 0 27550 TABLE DATA public <table_to_explore> <database>

保存該文件后,它現在可以用於導入,其中所有行都以;開頭; 被忽略。

pg_restore -L restore.pgdump.list | psql

你可以做一個單行添加; 在具有特定表名的行之前,如果您完全想忽略特定表。

man pg_restore也在文檔末尾的示例中講述了這一點。

TL;DR 單線

pg_restore -L <(pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore') -d db_name_where_to_restore /path/to/db/dump

以下返回還原的“待辦事項列表”:

pg_restore -l /path/to/db/dump 

以下將返回除table_to_ignore之外的所有table_to_ignoregrep選項-v使其反向匹配):

pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore'

這可以與pg_restore選項-L結合使用,該選項需要輸入待辦事項列表:

pg_restore -L <(pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore') -d db_name_where_to_restore /path/to/db/dump

如果你有幾個表要忽略,你可以 grep 到:

pg_restore -l /path/to/db/dump | grep -vE 'TABLE DATA public (table_1|table_2|table_3)'

請注意-E選項的存在,用於grep使用擴展的正則表達式。

pg_restore沒有排除表參數,它有一個包含表參數。

-t 表

--table=table

僅恢復命名表的定義和/或數據。 可以使用多個 -t 開關指定多個表。 這可以與 -n 選項結合使用來指定模式。

如果您有大量表格,它確實需要一點點輸入,但它確實允許您通過將特定表格的名稱排除在列表之外來排除它們。

這里命令不起作用:

pg_restore -L restore.pgdump.list | psql

由 Jesper Grann Laursen 回答!

這里它按照以下順序工作:

pg_restore -l $pgdump_file > restore.pgdump.list

;2429; 0 27550 TABLE DATA public <table_to_explore> <database>

pg_restore -v -L restore.pgdump.list -d dbname pgdump.file

暫無
暫無

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

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