goodbyegangsterのブログ

備忘録的な

Windowsにpsqlをインストールして、Redshiftへ接続する方法

Windows10で利用する時の方法です。尚、SQL Workbench/Jをインストールする方法はこちら。

SQL workbench/JからRedshiftに接続して、テーブルが作成できない件 - goodbyegangsterのブログ

psqlをダウンロードします。Windowsでは、psql単体のみでインストールする方法はないでようで、postgerSQLのサイトに行って、postgerSQL本体のバイナリファイルをダウンロードしてきます。

https://www.postgresql.org/download/windows/

AWS公式では、バージョン"8.X"のpsql以外サポートしないと記載あるのですが、既にバージョン8時代のものはダウンロードできませんでした。。。 Not Supported になっていない、最も古いバージョンである 9.3.22 をダウンロード、zipファイルになっているので解凍して、適当なパスに保管。僕は C:\Program Files\pgsql に置いてます。

後はシステム環境変数Path に、 C:\Program Files\pgsql\bin を追加してあげればOK。OS再起動後はpsqlが利用可能となります。

C:\>psql --version
psql (PostgreSQL) 9.3.22

Redshiftへconnectする方法はこちら。

psql ツールを使用してクラスターに接続する - Amazon Redshift

Windowsから接続しようとすると、Clientのエンコード設定でSJISやめろ、と怒られます。

C:\>psql -h XXXXXXX.XXXXXXXXXX.ap-northeast-1.redshift.amazonaws.com -U root -d test -p 5439
ユーザ root のパスワード:
psql: FATAL:  invalid value for parameter "client_encoding": "SJIS"

そのため接続前に、 PGCLIENTENCODING環境変数UTF8 で定義してあげます。同時に、Redshift側から返された文字もUTF8になっているため、Windowsコマンドプロンプトでは文字化けして表示されてしまいます。事前にchcpコマンドで、コマンドプロンプト文字コードをUTF8対応に変更しておきます。

C:\>chcp 65001
C:\>set PGCLIENTENCODING=UTF8
C:\>psql -h XXXXXXX.XXXXXXXXXX.ap-northeast-1.redshift.amazonaws.com -U root -d test -p 5439
ユーザ root のパスワード:
psql (9.3.22, サーバー 8.0.2)
SSL 接続 (暗号化方式: ECDHE-RSA-AES256-GCM-SHA384, ビット長: 256)
"help" でヘルプを表示します.

test=#

参考となるAWS Forumはこちら。

https://forums.aws.amazon.com/thread.jspa?messageID=600088

追記(2018/05/15)

上記方法でも、問題があることが分かりました。具体的には、 Redshiftのテーブル名やカラム名にマルチバイト文字(日本語)を利用していると、対応ができないことが分かりました。つまり、以下みたいなSQLを利用するとエラーになります。

# select * from テストテーブル;
ERROR:  String contains invalid or unsupported UTF-8 codepoints. Bad UTF-8 hex sequence: fe (error 1)

コマンドプロンプトに日本語を入力しても、どうもそれをSJIS形式でRedshiftまで渡してしまうようで、UTF-8にしてくれないようです。Redshift側から来るUTF-8のデータは、chcpコマンドにより、ちゃんと解析されて表示されているのですが、クライアント側から送る場合、対応できないようです。

この回避方法をかなり調べているのですが、未だ見つかっていないです。。。

追記(2018/06/07)

windows subsystem for linux を利用して ubuntu 環境を用意してあげて、そこにpsqlを入れれば対応できる抜け道をあみだしました!!!

なんだかなー、という感じですが、今の所これで対応しています。