[pgsql-jp: 41798] Re: ERROR: could not create relation "pg_toast_toast_XXXX"の回避策について

TAKATSUKA Haruka harukat @ postgresql.jp
2015年 7月 8日 (水) 20:14:54 JST


高塚と申します。
なかなか古いバージョンですね。

解消策としては、ダンプを取ってデータを退避して、
データベースクラスタを作り直すことをやってみたいです。

(コマンド例)
# su - postgres
$ pg_dumpall > all.dump
$ cp $PGDATA/*.conf  /tmp/conf_backup/
$ mv $PGDATA  "${PGDATA}.bak"
$ initdb -E  EUC_JP --no-locale
$ cp /tmp/conf_backup/*.conf  $PGDATA/
$ pg_ctl start
$ psql -f all.dump

現象は、既存ファイルが新たに作ろうとした TOASTテーブル用のファイルと名前が
ぶつかっているということのようですが、原因は何でしょう。もし、7.4.2 が
リリースされていたころからずっと使っていたなら OID の周回かもしれませんね。
(そうであるなら、解決策はやっぱりデータベースクラスタの作り直しです)

何かの既知バグかもしれませんが、7.4.30 までリリースノートを見ていくのは大変です。
目をつぶってデータベースクラスタ作り直し、さらに可能なら 7.4.30 にバージョンアップ、
さらに可能なら 9.x にバージョンアップをしたいところです。


On Wed, 08 Jul 2015 16:17:59 +0900
FASYS)小川 智康 <tomoyasu.ogawa @ keinet.ne.jp> wrote:

> 
> 初めて質問させていただきます。小川と申します。
> 
> Red Hat Enterprise Linux ES release 3/Postgres7.4.2にて、
> pg_toast関連のエラーが発生し、対処に憂慮しております。
> 
> 大まかなシステムの仕組みとしては
> 設問を自由に作成できるアンケートのようなシステムを構築し、
> お客様の回答内容を日次でバッチ処理して集計するというものになります。
> 
> お客様の回答内容は、1設問ごとに1レコードずつ
> 「アンケート番号、お客様番号、設問番号、回答内容」といった形式で
> テーブルに記録しております。
> 
> そしてバッチの集計処理にて、1アンケートごとに
> 集計用のテンポラリテーブルを作成し、
> 1お客様毎に1レコードずつ記録する形式にしてから
> CSV出力を行い、
> 次のアンケートの集計を行う前にテンポラリテーブルを削除する
> という処理を行っております。
> (上記処理をアンケートの数だけループ処理しており、
>  現在は1回のバッチ処理にて5000ほどの集計処理を行っております)
> 
> 最近になり、3日間ほどですがこのテンポラリテーブルを作成する箇所で
> postgresエラーが検知され処理に失敗しているのですが、
> その原因・対処が分からないため、アドバイス頂きたく存じます。
> 
> 以下エラーメッセージの内容になります。
> 
> pg_query(): Query failed: ERROR:  could not create relation "pg_toast_1558545": File exists
> 
> 
> 一度このエラーが発生すると、それ以降最後の集計分まで同じエラーが続いております。
> 
> pg_toastの仕組みについては多少勉強しましたが、
> このエラーに対する回避策まではつかむことができず、
> 前例や解決手段がないものかご教示頂けたら幸いでございます。
> 
> 以上お手数ですがよろしくお願いいたします。

______________________________________________________________________
 日本PostgreSQLユーザ会  高塚 遙  http://www.postgresql.jp 



pgsql-jp メーリングリストの案内