如何将整个csv数据库转储为Excel可读的格式(csv可以)。

时间:2013-05-17 20:25:50

标签: sql postgresql csv dump

这可能是徒劳的,但我的一位客户完全坚持他需要整个数据库转储才能在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。但是如何在单个命令中转储整个数据库没有答案。

1 个答案:

答案 0 :(得分: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循环中查询(即:select tablename from pg_tables where NOT (tablename LIKE 'pg%' OR tablename LIKE 'sql%')选择当前模式中的所有表名,但以pgsql开头的那些名称很可能是postgres的保留名称和SQL的东西。那里最有可能是更好的方式,但地狱,谁在乎呢?