• ベストアンサー

psqlでFATALエラー

PostgreSQL8.0.8の環境です。知り合いから頼まれての作業なのですが、2~3日前からPHPコネクションエラーが発生し、SSHからpostgres権限で該当DBにログインしようとしたところ、 psql: FATAL: conversion between LATIN1 and EUC_JP is not supported と表示され、PSQLログインが出来ません。PgAdminやCSEでも同じメッセージです。 1.この状態から何とかログインできる方法はあるのか? 2.バックアップが無いようなので、このDBからテーブルやフィールド項目をGETする方法はあるのか?最悪、これまでのデータを破棄して、新しくDBを作成し、ガラだけでも作りたい。pg_dump をやろうとしても、同じFATALエラーが出ます。 3.何が原因でこれが起きたのか?変な文字が入り込んだ? 経験された方、わかる方がいらっしゃればと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • alte_6
  • ベストアンサー率60% (9/15)
回答No.3

export PGCLIENTENCODING=UNICODE を指定するか pg_dumpallでなくpg_dump "database名"で個別 バックアップ どちらかでうまくいきませんか

TAI_0824
質問者

お礼

ありがとうございます。 export PGCLIENTENCODING=UNICODEを指定して、pg_dump で個別にスキーマ+データを取り出すことができました。 感謝です! pg_dumpデータが1Gを越えてました・・・。 スキーマを見ると、トリガーやファンクションのコメント部分に日本語が多数入っており、これが災いしていたのか、と思っています。 とにかくありがとうございました。

その他の回答 (2)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

> >psql -l で見たデータベースのエンコーディングは何になっていますか。 > EUC_JP になってます。 client_encoding をデータベースと同じ EUC_JP にすると、どうでしょうか。 文字コードの conversion エラーは起きないと思いますが。

TAI_0824
質問者

お礼

再度の回答、ありがとうございます。 client_encoding をEUC_JPとしてpg_ctl restart をかけましたが、現象は同じですね。。 これは、壊れたという判断が妥当でしょうか? せめてどこからかスキーマが取れないか模索しています。psql かpg_connect で接続できないと、テーブル名やフィールド名、データ形は取得できないですよね?

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

psql -l で見たデータベースのエンコーディングは何になっていますか。 postgresql.conf で client_encoding を設定し、それがデータベースの エンコーディングと不一致になっていませんか(違っていても本来問題 ありませんが、一致していれば自動変換は働かないのでエラーになりま せん)。 pg_dumpall でのダンプも失敗しますか。 pg_dump --schema-only でスキーマだけをダンプできませんか。

TAI_0824
質問者

お礼

ご回答、ありがとうございました。 >psql -l で見たデータベースのエンコーディングは何になっていますか。 EUC_JP になってます。 >postgresql.conf で client_encoding を設定し、それがデータベースのエンコーディングと不一致になっていませんか client_encodingはsql_aeciiとなってますがコメントになってました。 >pg_dumpall でのダンプも失敗しますか。 以下のメッセージが出て、途中でexitします。 pg_dump: SQL command failed pg_dump: Error message from server: ERROR: character 0xe697a5 of encoding "UNICODE" has no equivalent in "LATIN1" pg_dump: The command was: SELECT proretset, prosrc, probin, proargnames, provolatile, proisstrict, prosecdef, (SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname FROM pg_catalog.pg_proc WHERE oid = '4022564'::pg_catalog.oid pg_dumpall: pg_dump failed on database "DB名", exiting ※ただし、このDB名は該当のDBではないのです・・・。 >pg_dump --schema-only でスキーマだけをダンプできませんか。 pg_dump: [archiver (db)] connection to database "DB名" failed: FATAL: conversion between LATIN1 and EUC_JP is not supported が表示され、ダンプできません。このDB名は該当のDBです。 先方に聞いたら、仕様書が無い、とのこと。私も人のことを言えませんが。。。仕様書なし、スキーマも出ず、バックアップもない、でどうやったら復旧できるのか、という感じですねえ。。。

関連するQ&A