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

オンデマンド(動画)セミナー

    • PostgreSQLに関連するセミナー動画を公開中。いつでもセミナーをご覧いただけます。
      • 【事例解説】運送業務改革をもたらす次世代の運送業界向けDXプラットフォームの構築
      • ハイブリッドクラウドに最適なOSSベースのデータベースご紹介

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

お電話でのお問い合わせ

Webでのお問い合わせ

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

ページの先頭へ