【豆知識】エンコーディング(符号化方式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 文書

PostgreSQLインサイド

2019年10月11日公開

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ