データベースをCSVファイルにエクスポートします。これは可能ですか?データベースをCSVファイルにエクスポート
可能であれば、私はPostgreSQLを使ってこれをどうやって行うことができますか?特定のテーブルをCSVファイルに変換することができますが、データベース全体についてはわかりません。
データベースをCSVファイルにエクスポートします。これは可能ですか?データベースをCSVファイルにエクスポート
可能であれば、私はPostgreSQLを使ってこれをどうやって行うことができますか?特定のテーブルをCSVファイルに変換することができますが、データベース全体についてはわかりません。
COPY tablename TO '/tmp/products_199.csv' DELIMITER ',' CSV HEADER;
チェックこのアウト
あなたはpsqlのコンソールでこれを使用することができます。
bashのコンソールで\copy (SELECT foo,bar FROM whatever) TO '/tmp/file.csv' DELIMITER ',' CSV HEADER
それとも:
psql -P format=unaligned -P tuples_only -P fieldsep=\, -c "SELECT foo,bar FROM whatever" > output_file
これはより多くのupvotesに値する - 簡単で実用的な解決策! –
質問に答えることができないので、これはより少ないupvotesに値するでしょうか? – Eevee
あなたが持つ一つの大きなCSVファイルをしたいですかすべてのテーブルのデータ?
おそらくそうではありません。テーブルごとに別々のファイルまたは1つの大きなファイルを必要とし、CSVファイルヘッダーで表現できる情報が増えます。
別々のファイル
他の回答には、各テーブルに別々のファイルを作成する方法を示しています。あなたはあなたに、このようなクエリですべてのテーブルを表示するには、データベースを照会することができますpg_dump
コマンドで作成することができますPostgreSQLのCOPY
コマンドで使用されるCSV形式ですべてのテーブルと
SELECT DISTINCT table_name
FROM information_schema.columns
WHERE table_schema='public'
AND position('_' in table_name) <> 1
ORDER BY 1
一つの大きなファイル
一つの大きなファイルを。出力にはCREATE TABLE
,CREATE FUNCTION
などがありますが、Python、Perlなどの言語を使用すると、CSVデータのみを簡単に抽出できます。
私は(ビュー、@tarikkiのおかげ除く)テーブルあたり1つの.csvファイルを作成するために、このにPL/pgSQL関数を作った:
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/
を
エクスポート中にデータベースとユーザーを指定する場合、次のようにPiotrの答えを変更することができます。
psql -P format=unaligned -P tuples_only -P fieldsep=\, -c "select * from tableName" > tableName_exp.csv -U <USER> -d <DB_NAME>
ビューをコピーしようとしているからスクリプトを防ぐために、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;
どこから 'products_273'を取得したのですか?あなたは[この回答](http://stackoverflow.com/a/1120390/704015)から直接コピーし貼り付けましたか?クールではありません。そして、この答えをあきらめた人たちには恥ずべきものです。 –
別の質問への回答からのコピー/貼り付けで何が問題になっていますか?私はこれが特に良い答えだとは思わない。なぜなら、データベースではなく単一のテーブルにしか適用されないからだ。 –
@CarlG問題は参考にされています。あなたは他人の仕事から栄光を得てはなりません...コピー/貼り付けの代わりに、あなたは質問にコメントを追加して、あなたが助けてくれると思われる答えにリンクすることができます(そして、ここで回答がうまく収まらない場合でも、質問を重複してマークすることができます) – Random