【豆知識】エンコーディング(符号化方式UTF-8形式)を指定して、テーブルのデータをクライアントに抽出したい
PostgreSQLインサイド
実現方法
PostgreSQLサーバーとクライアントの文字セット(エンコーディング)が異なる場合、PostgreSQLは自動的に文字セットを変換します。
例えばPostgreSQLサーバーの文字セットがUTF-8で、Windowsクライアントから接続した場合、Windowsクライアントの符号化方式がデフォルトでSJISであるため、サーバーの符号化方式と異なる状況となります。このような場合、COPYコマンドでテーブルのデータをサーバーの文字セットのままファイルに抽出したいときは、COPYコマンドのENCODINGオプションに、PostgreSQLサーバーの符号化方式を指定して実行してください。
実行例
PostgreSQLサーバーの符号化方式がUTF-8のとき、テーブル(myschema.table1)のデータをファイル(C:¥tmp¥table1.txt)に抽出する場合は、psqlコマンドでデータベースに接続後、以下のように記述します。
mydb=# ¥copy myschema.table1 to 'C:¥tmp¥table1.txt' encoding 'UTF8';
クライアントのファイルにアクセスする場合は、メタコマンド(¥copy)を利用します。
出力されたC:¥tmp¥table1.txt内のデータの符号化方式は、UTF-8となります。
ポイント
- コピーの際、データはENCODINGオプションまたは現在のクライアント符号化方式で符号化されます。COPYコマンドのENCODINGオプションを省略すると、クライアントの符号化方式が使用されます。
上記の例のようにPostgreSQLサーバーの符号化方式がUTF-8、クライアント符号化方式がSJISの場合、ENCODINGオプションを省略すると、コピー先のデータはSJISに変換されます。なお、テーブル内にクライアント符号化方式がサポートしていない文字が含まれている場合は、エラーとなります。 - クライアント接続後にクライアント符号化方式を変更するためには、以下の方法があります。また、PGCLIENTENCODING環境変数を使用すると、サーバーとの接続時にクライアント符号化方式が設定されます。
- psqlで¥encodingコマンドを使用
- libpqのクライアント符号化方式を制御する関数を使用
- SET client_encoding TOを使用
- COPYコマンドでファイルからテーブルへデータを格納する場合においても、PostgreSQLサーバーとクライアントの符号化方式が異なると文字セットの変換が行われるため、注意してください。
- 現在のクライアント符号化方式を問い合わせるには、psqlでSHOW client_encodingを実行します。
実行例
mydb=# SHOW client_encoding;
client_encoding
-----------------
SJIS
(1 行)
参考
PostgreSQL 11.4 文書
-
Documentation(PostgreSQLオフィシャル)
- VI. Reference
- I. SQL Commands
- COPY — copy data between a file and a table
- I. SQL Commands
- VI. Reference
-
PostgreSQL日本語ドキュメント(日本PostgreSQLユーザ会)
- VI. リファレンス
- I. SQLコマンド
- COPY — ファイルとテーブルの間でデータをコピーする
- I. SQLコマンド
- VI. リファレンス
PostgreSQLインサイド
2019年10月11日公開
富士通のソフトウェア公式チャンネル(YouTube)
-
- 富士通のミドルウェア製品のご紹介や各種イベント・セミナーの講演内容、デモンストレーションなどの動画をご覧いただけます。
- 富士通のミドルウェア製品のご紹介や各種イベント・セミナーの講演内容、デモンストレーションなどの動画をご覧いただけます。
PostgreSQLについてより深く知る
PostgreSQLに興味をお持ちのお客様はこちらのコンテンツもお勧めです。ぜひご覧ください。
本コンテンツに関するお問い合わせ
お電話でのお問い合わせ
-
富士通コンタクトライン(総合窓口)
0120-933-200受付時間:9時~12時および13時~17時30分(土曜日・日曜日・祝日・当社指定の休業日を除く)