为特定表和条目创建数据库转储Postgres

Rol*_*and 75 postgresql

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

我所知道的唯一声明可以达到这个目的

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将不胜感激.

a_h*_*ame 136

手册开始:" 通过编写多个-t开关可以选择多个表 "

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

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  
Run Code Online (Sandbox Code Playgroud)

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

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

  • -T开关的方式相同,但用于排除表.如果您需要除一个或两个桌子之外的所有桌子等,可能会有用. (16认同)
  • `-D`选项[在版本8.4中删除](https://www.postgresql.org/docs/8.4/static/release-8-4.html#AEN98016).你现在必须使用`--column-inserts`. (4认同)
  • `-D`选项似乎在PG 9.1之后消失了 (3认同)
  • 尝试 pg_dump --host 127.0.0.1 --port 5432 --username "<用户名>" --column-inserts --verbose --file "/tmp/<filename.sql>" --table "^<regex>* " "<表名>" (2认同)

小智 18

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

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>
Run Code Online (Sandbox Code Playgroud)

例如,要转储以"test"开头的表,您可以使用

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>
Run Code Online (Sandbox Code Playgroud)

  • 它不是正则表达式,它使用postgres的“模式”,因此实际上应该是““ test *””:https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS (4认同)
  • 如果它是一个正则表达式,不应该是`^ test.*`而不是`^ test*`? (2认同)