这可能是徒劳的,但我的一位客户完全坚持他需要整个数据库转储才能在Excel中执行分析。
如何将单个表转储到csv有许多答案(例如:Export to CSV and Compress with GZIP in postgres,Save PL/pgSQL output from PostgreSQL to a CSV file,Export Postgres table to CSV file with headings)。关于这个问题甚至还有一个封闭的问题:https://stackoverflow.com/questions/9226229/how-to-take-whole-database-dump-in-csv-format-for-postgres。但是如何在单个命令中转储整个数据库没有答案。
答案 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$;
一些细节:
psql
命令中,它会将当前架构中的所有表转储到/tmp/dump
目录(请先创建此目录)select tablename from pg_tables where NOT (tablename LIKE 'pg%' OR tablename LIKE 'sql%'
)选择当前模式中的所有表名,但以pg
和sql
开头的那些名称很可能是postgres的保留名称和SQL的东西。那里最有可能是更好的方式,但地狱,谁在乎呢?