質問 |
||
| QNo.3803736 | psqlでFATALエラー | |
|---|---|---|
| 質問者:TAI_0824 |
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.何が原因でこれが起きたのか?変な文字が入り込んだ? 経験された方、わかる方がいらっしゃればと思います。 |
|
困り度:
|
||
| 質問投稿日時: 08/02/23 23:08 |
||
回答良回答20pt |
|
| ANo.3 | export PGCLIENTENCODING=UNICODE を指定するか pg_dumpallでなくpg_dump "database名"で個別 バックアップ どちらかでうまくいきませんか |
|---|---|
| 回答者:alte_6 | |
| 種類:回答 どんな人:経験者 自信:参考意見 |
|
| 回答日時: 08/02/25 12:51 |
|
| |
| この回答へのお礼 | ありがとうございます。 export PGCLIENTENCODING=UNICODEを指定して、pg_dump で個別にスキーマ+データを取り出すことができました。 感謝です! pg_dumpデータが1Gを越えてました・・・。 スキーマを見ると、トリガーやファンクションのコメント部分に日本語が多数入っており、これが災いしていたのか、と思っています。 とにかくありがとうございました。 |
回答 |
|
| ANo.2 | > >psql -l で見たデータベースのエンコーディングは何になっていますか。 > EUC_JP になってます。 client_encoding をデータベースと同じ EUC_JP にすると、どうでしょうか。 文字コードの conversion エラーは起きないと思いますが。 |
|---|---|
| 回答者:t-okura | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/02/24 21:45 |
|
| |
| この回答へのお礼 | 再度の回答、ありがとうございます。 client_encoding をEUC_JPとしてpg_ctl restart をかけましたが、現象は同じですね。。 これは、壊れたという判断が妥当でしょうか? せめてどこからかスキーマが取れないか模索しています。psql かpg_connect で接続できないと、テーブル名やフィールド名、データ形は取得できないですよね? |
回答良回答10pt |
|
| ANo.1 | psql -l で見たデータベースのエンコーディングは何になっていますか。 postgresql.conf で client_encoding を設定し、それがデータベースの エンコーディングと不一致になっていませんか(違っていても本来問題 ありませんが、一致していれば自動変換は働かないのでエラーになりま せん)。 pg_dumpall でのダンプも失敗しますか。 pg_dump --schema-only でスキーマだけをダンプできませんか。 |
|---|---|
| 回答者:t-okura | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/02/24 12:33 |
|
| |
| この回答へのお礼 | ご回答、ありがとうございました。 >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です。 先方に聞いたら、仕様書が無い、とのこと。私も人のことを言えませんが。。。仕様書なし、スキーマも出ず、バックアップもない、でどうやったら復旧できるのか、という感じですねえ。。。 |