web-dev-qa-db-ja.com

データベースをCSVファイルにエクスポート

データベースをCSVファイルにエクスポートしたい。これは可能ですか?

可能であれば、PostgreSQLを使用してこれを行うにはどうすればよいですか?特定のテーブルをCSVファイルに変換できることがわかりましたが、データベース全体については知りません。

30
Anand Singh

このpl/pgsql関数を作成して、テーブルごとに1つの.csvファイルを作成する(@tarikkiのおかげでビューを除く):

CREATE OR REPLACE FUNCTION db_to_csv(path TEXT) RETURNS void AS $$
declare
   tables RECORD;
   statement TEXT;
begin
FOR tables IN 
   SELECT (table_schema || '.' || table_name) AS schema_table
   FROM information_schema.tables t INNER JOIN information_schema.schemata s 
   ON s.schema_name = t.table_schema 
   WHERE t.table_schema NOT IN ('pg_catalog', 'information_schema')
   AND t.table_type NOT IN ('VIEW')
   ORDER BY schema_table
LOOP
   statement := 'COPY ' || tables.schema_table || ' TO ''' || path || '/' || tables.schema_table || '.csv' ||''' DELIMITER '';'' CSV HEADER';
   EXECUTE statement;
END LOOP;
return;  
end;
$$ LANGUAGE plpgsql;

そして、私はそれをこのように使用します:

SELECT db_to_csv('/home/user/dir');
-- this will create one csv file per table, in /home/user/dir/
53
jllodra

これはpsqlコンソールで使用できます。

\copy (SELECT foo,bar FROM whatever) TO '/tmp/file.csv' DELIMITER ',' CSV HEADER

または、bashコンソールで:

psql -P format=unaligned -P tuples_only -P fieldsep=\, -c "SELECT foo,bar FROM whatever" > output_file
42

スクリプトがビューをコピーしようとするのを防ぐために1行追加することにより、jlldorasの素晴らしい回答を修正しました。

CREATE OR REPLACE FUNCTION db_to_csv(path TEXT) RETURNS void AS $$
declare
   tables RECORD;
   statement TEXT;
begin
FOR tables IN 
   SELECT (table_schema || '.' || table_name) AS schema_table
   FROM information_schema.tables t INNER JOIN information_schema.schemata s 
   ON s.schema_name = t.table_schema 
   WHERE t.table_schema NOT IN ('pg_catalog', 'information_schema', 'configuration')
   AND t.table_type NOT IN ('VIEW')
   ORDER BY schema_table
LOOP
   statement := 'COPY ' || tables.schema_table || ' TO ''' || path || '/' || tables.schema_table || '.csv' ||''' DELIMITER '';'' CSV HEADER';
   EXECUTE statement;
END LOOP;
return;  
end;
$$ LANGUAGE plpgsql;
14
tarikki
COPY tablename TO '/tmp/products_199.csv' DELIMITER ',' CSV HEADER;

これをチェックしてください

5
Tombeau

エクスポート中にデータベースとユーザーを指定する場合は、Piotrによって与えられた回答を次のように変更するだけです。

psql -P format=unaligned -P tuples_only -P fieldsep=\, -c "select * from tableName" > tableName_exp.csv -U <USER> -d <DB_NAME>
1
smishra

すべてのテーブルのデータを含む1つの大きなCSVファイルが必要ですか?

おそらくない。テーブルごとに個別のファイルを作成するか、CSVファイルヘッダーで表現できる詳細情報を持つ1つの大きなファイルが必要です。

個別のファイル

他の回答は、各テーブルに個別のファイルを作成する方法を示しています。データベースにクエリを実行して、そのようなクエリですべてのテーブルを表示できます。

SELECT DISTINCT table_name
FROM information_schema.columns
WHERE table_schema='public'
AND position('_' in table_name) <> 1
ORDER BY 1

1つの大きなファイル

PostgreSQL COPYコマンドで使用されるCSV形式のすべてのテーブルを含む1つの大きなファイルは、pg_dumpコマンド。出力には、すべてのCREATE TABLECREATE FUNCTIONなど。ただし、Python、Perlまたは同様の言語では、CSVデータのみを簡単に抽出できます。

0
Michał Niklas

RazorSQL のコピーをダウンロードし、データベースサーバーを開いてデータベースを右クリックし、Export Tablesを選択しました。 CSV、Excel、SQLなどのオプション.

0
Robs