0

これは無駄な作業かもしれませんが、私のクライアントの 1 人は、Excel で分析を実行するにはデータベース全体のダンプが必要だと完全に主張しました。

単一のテーブルを csv にダンプする方法については、多くの回答があります (このように、postgresでCSV にエクスポートして GZIP で圧縮する、PostgreSQL からの PL/pgSQL 出力を CSV ファイルに保存する、 Postgres テーブルを見出し付きの CSV ファイルにエクスポートする)。このテーマに関する非公開の質問もあります: 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 ループ内のクエリ (つまり: select tablename from pg_tables where NOT (tablename LIKE 'pg%' OR tablename LIKE 'sql%') で始まるものを除いて、現在のスキーマ内のすべてのテーブル名を選択します。これは、postgres および SQL 用に予約されている可能性が高い名前ですpgsqlおそらくもっと良い方法があるでしょうが、誰が気にしますか?
于 2013-05-17T20:25:49.860 に答える