0

这可能是徒劳的,但我的一位客户完全坚持认为他需要整个数据库转储才能在 Excel 中执行分析。

关于如何将单个表转储到 csv 有很多答案(例如:Export to CSV and Compress with GZIP in postgresSave PL/pgSQL output from PostgreSQL to a CSV fileExport Postgres table to CSV file with headings)。关于这个主题甚至还有一个封闭的问题:https ://stackoverflow.com/questions/9226229/how-to-take-whole-database-dump-in-csv-format-for-postgres 。但是没有关于如何在单个命令中转储整个数据库的答案。

4

1 回答 1

1

无论如何,这是我的脚本:

DO $DO$
DECLARE 
r record;
BEGIN
   FOR r IN select tablename from pg_tables where NOT (tablename LIKE 'pg%' OR tablename LIKE 'sql%') LOOP
       EXECUTE 'copy (select * from "'||  r.tablename || '" ) to ''/tmp/dump/' || r.tablename || '.csv'' with csv header';
   END LOOP; 
END;

$DO$; 

一些要点:

  1. 它可以粘贴到psql命令中,它将当前模式中的所有表转储到/tmp/dump目录(请先创建此目录
  2. 在 for 循环中查询(即: )选择当前模式中的所有表名,除了以andselect tablename from pg_tables where NOT (tablename LIKE 'pg%' OR tablename LIKE 'sql%'开头的那些很可能是 postgres 和 SQL 东西的保留名称。很可能有更好的方法,但见鬼,谁在乎呢?pgsql
于 2013-05-17T20:25:49.860 回答