質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

35030閲覧

PostgreSQLでのスクリプトファイル実行について

syncrock

総合スコア209

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2016/06/28 02:42

PostgreSQLにコマンドプロンプト、もしくはexe起動でpsqlを立ち上げ、
「\i」コマンドでスクリプトファイルを実行したときに以下のエラーが表示されます。

「符号化方式"UTF8"で無効なバイトシーケンスです」

スクリプトファイルではclient_encodingをUTF8に設定しています。
ファイル自体をUTF8に設定したあと行うとエラーは表示されずに正常に実行されます。
ただ、UTF8ではない場合(SJISなど)は必ず出ます。
pgAdminとかではなく、コマンドプロンプト(またはpsql)で実行するにあたり、
ファイルのエンコードがUTF8ではないと実行できないのでしょうか。
「\i ファイル名」の後ろに「(encoding 'UTF8')」を記述して実行しても変わりませんでした。

そもそもwindowsのコマンドプロンプトはUTF8は対応していない?みたいな記述は
調べてみると結構あるので無理なのかなぁと思ってはいますが、
psqlも同じなんでしょうか?

PostgreSQLのバージョンは9.4です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

スクリプトファイルの文字コードを「utf8」にすれば動きますので、
常にその設定にするようにします。
ありがとうございました。

投稿2016/06/30 04:26

syncrock

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/01 08:05

sqlファイルの中でUTF8だって宣言しておいてるのに、ファイルそのもののエンコーディングがUTF8じゃなかったって、初歩的すぎて気づかないしエラーが出るのは当たり前ですね。解決してよかったです。SJISならSJIS、SHIFT_JIS_2004ならSHIFT_JIS_2004もありますので、テキストエディタで読み込んだ時に文字化けして困る場合は適切なエンコーディングを使ってくださいね。
guest

0

psqlのインタプリタ上で、\encoding UTF8ってやるんじゃないかな。
\i ファイル名の時に同時にエンコーディング指定はできなかったはず。
面倒であれば、\i ファイル名で与えるSQLファイル内の冒頭に記述しておくと良いです。

参考:
psql
http://www.postgresql.jp/document/9.5/html/app-psql.html
22.3. 文字セットサポート
http://www.postgresql.jp/document/9.5/html/multibyte.html

【追記】
こちらのブログ記事はチェック済みでしょうか。
様々な対策がまとまっておりました。

psqlで「符号化方式UTF8における~バイトシーケンスを持つ文字」エラーの対策
http://kenpg.bitbucket.org/blog/201601/12.html

投稿2016/06/28 03:26

編集2016/06/28 07:03
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syncrock

2016/06/28 05:24

回答ありがとうございます。 すでにスクリプトファイルでclient_encodingの設定をしてますので、 実行する前はSJISだったencodingが実行後にはUTF8になっていることは確認しております。
退会済みユーザー

退会済みユーザー

2016/06/28 07:06

「set client_encoding to 'utf8';」と「\encoding UTF8」は使い分けが必要な場合があるようです。
syncrock

2016/06/28 07:43

encodingでUTF8になっていることを確認したうえで実行しても、「set client~」で設定したか「\encoding~」で設定したかで結果が変わるんですか?? 一度スクリプトファイルを実行し、「set client~」でencodingがUTF8になっていることを確認したあと再度実行しても同じだったのですが。。。
退会済みユーザー

退会済みユーザー

2016/06/29 02:20

その思い込みでハマっているのだとしたら、思い込みを解消しないと前進しないですよ。試して解決したらそれが正解です。同じ環境を(情報不足のため)こちらで再現できない以上、考えられる可能性を示しているだけですので、突破できない可能性もありますことはご了承ください。
syncrock

2016/06/30 04:25

一応\encodingでやってみましたがやっぱり変化なしでした。 ありがとうございます。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問