【问题标题】:Creating a database dump for specific tables and entries Postgres为特定表和条目创建数据库转储 Postgres
【发布时间】:2011-09-09 09:47:53
【问题描述】:

我有一个包含数百个表的数据库,我需要做的是导出指定的表并将数据的语句插入到一个 sql 文件中。

我知道的唯一能做到这一点的说法是

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

我应该为每个表运行这个语句还是有办法运行一个类似的语句来将所有选定的表导出到一个大的 sql 中。上面的pg_dump不导出表模式只插入,我两个都需要

任何帮助将不胜感激。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    来自manual:“可以通过编写多个 -t 开关来选择多个表

    所以你需要列出你所有的表

    pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  
    

    请注意,如果您有多个具有相同前缀(或后缀)的表,您还可以使用通配符通过-t 参数选择它们:

    "另外,table 参数根据 psql 的 \d 命令使用的相同规则被解释为模式"

    【讨论】:

    • -T 开关的方式相同,但用于排除表。如果您只需要一个或两个表等,可能会很有用。
    • -D 选项似乎在 PG 9.1 及以后的版本中消失了
    • -D 选项为 removed in version 8.4。你现在必须改用--column-inserts
    • 尝试 pg_dump --host 127.0.0.1 --port 5432 --username "" --column-inserts --verbose --file "/tmp/" - -table "^*" ""
    【解决方案2】:

    如果这些特定的表与特定的正则表达式匹配,您可以在 pg_dump 中使用 -t 选项中的正则表达式。

    pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>
    

    例如转储以“test”开头的表,您可以使用

    pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>
    

    【讨论】:

    • 如果是正则表达式,不应该是^test.*而不是^test*吗?
    • 它不是正则表达式,它使用postgres的“模式”,所以它应该是"test*":postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
    • 使用正则表达式并非易事,生成无效的正则表达式:量词操作数无效错误。但是正则表达式是正确的......只有非常简单的正则表达式才有效
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2017-08-08
    • 2013-11-22
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多