PostgreSQL: PL/pgSQLを使用してデータをCSVファイルに書き出す
PostgreSQLからCSVファイルへPL/pgSQL出力を保存する
前提条件
- PostgreSQLデータベースへのアクセス
- 基本的なPL/pgSQLの知識
手順
-
PL/pgSQL関数を作成する
CREATE OR REPLACE FUNCTION export_users_to_csv()
RETURNS void
AS $$
DECLARE
-- 出力ファイル
filename text := '/path/to/output.csv';
-- ヘッダー行
header text := 'id,name,email';
-- データ
data text;
BEGIN
-- データを取得
data := (
SELECT
id,
name,
email
FROM users
);
-- CSVファイルを開く
-- 既存のファイルがあれば上書き
-- Windowsの場合は LF 改行コード、その他の場合は CRLF 改行コード
-- BOMは無し
-- 権限は 644
FOR f IN EXECUTE format('
SELECT pg_catalog.lo_open(
%L,
%L
)', filename, 'w') AS f
LOOP
-- ヘッダー行を書き込む
EXECUTE format('
SELECT pg_catalog.lo_write(
%L,
%L
)', f, header);
-- データを書き込む
EXECUTE format('
SELECT pg_catalog.lo_write(
%L,
%L
)', f, data);
-- ファイルを閉じる
EXECUTE format('
SELECT pg_catalog.lo_close(%L)', f);
END LOOP;
END;
$$
LANGUAGE plpgsql;
上記コードの変更点:
filename
変数を、実際のファイルパスに変更します。header
変数は、出力するCSVファイルのヘッダー行の内容に変更します。data
変数は、SELECT
クエリを変更して、必要なデータを取得するようにします。
SELECT export_users_to_csv();
-
CSVファイルを確認する
補足
- この例では、
lo_open
、lo_write
、lo_close
関数を使用してCSVファイルを作成しています。 - より多くの制御が必要な場合は、
COPY TO
コマンドを使用してCSVファイルを直接生成することもできます。
CREATE OR REPLACE FUNCTION export_users_to_csv()
RETURNS void
AS $$
DECLARE
-- 出力ファイル
filename text := '/path/to/output.csv';
-- ヘッダー行
header text := 'id,name,email';
-- データ
data text;
BEGIN
-- データを取得
data := (
SELECT
id,
name,
email
FROM users
);
-- CSVファイルを開く
-- 既存のファイルがあれば上書き
-- Windowsの場合は LF 改行コード、その他の場合は CRLF 改行コード
-- BOMは無し
-- 権限は 644
FOR f IN EXECUTE format('
SELECT pg_catalog.lo_open(
%L,
%L
)', filename, 'w') AS f
LOOP
-- ヘッダー行を書き込む
EXECUTE format('
SELECT pg_catalog.lo_write(
%L,
%L
)', f, header);
-- データを書き込む
EXECUTE format('
SELECT pg_catalog.lo_write(
%L,
%L
)', f, data);
-- ファイルを閉じる
EXECUTE format('
SELECT pg_catalog.lo_close(%L)', f);
END LOOP;
END;
$$
LANGUAGE plpgsql;
使い方
- 上記のコードを PostgreSQL データベースに保存します。
SELECT export_users_to_csv();
PostgreSQLからCSVファイルへPL/pgSQL出力を保存する他の方法
COPY TO
コマンドは、PostgreSQLテーブルのデータを直接CSVファイルに書き出すことができます。
COPY (
SELECT
id,
name,
email
FROM users
) TO '/path/to/output.csv' WITH CSV;
上記の例では、users
テーブルのデータが output.csv
ファイルにCSV形式で書き出されます。
オプション
DELIMITER
: 区切り文字を指定します。デフォルトはカンマです。HEADER
: ヘッダー行を出力します。QUOTE
: 文字列を引用符で囲みます。NULL
: NULL値をどのように出力するかを指定します。
pg_dump
コマンドは、PostgreSQLデータベース全体または一部をダンプファイルに保存することができます。
pg_dump -t users -F csv > output.csv
-t
: ダンプするテーブルを指定します。-F
: 出力形式を指定します。
外部ツール
CSVファイルの生成に特化した外部ツールを使用することもできます。
これらのツールは、より多くの機能やオプションを提供している場合があります。
- シンプルな方法でデータをCSVファイルに保存したい場合は、
COPY TO
コマンドがおすすめです。 - より多くの制御が必要な場合は、PL/pgSQL関数を使用することができます。
- 外部ツールは、より多くの機能やオプションが必要な場合に便利です。
sql postgresql csv