2010年12月 3日

[pgsql-jp: 40577] Re:SQL文の長さ制限について

2010/12/2 <toshihideka4316@xxxxx>:
> また、12万個ではなく、unionで6万個つないだSQLではサーバはクラッシュせず以
> 下のエラーメッセージがクライアントに出力されました。
> ↓
> ERROR: スタック長制限を越えました
> HINT: プラットフォームのスタック長上限に合うことを確認した後、設定パラメータ
> "max_stack_depth"を増やしてください。

スタック領域が足らないのが原因と思われます。Postgres サーバを起動する
ユーザ (一般的には postgres) のスタックを増やしてやる必要があると
思われます。Linux だと ulimit -s でしたっけ?
その際、postgresql.conf の max_stack_depth も合わせて増やしてください。

# ただ、それこそ「PostgreSQLのparserをいじめてみた」に類するような
# クエリなので、たとえ動いてもあまり性能が出ないかもしれません。

上手く動かない原因は、SQLを再帰処理でパースしているので、長すぎる UNION は
再帰が深くなりすぎるのだと思われます。普通のアプリケーションだとその場合
stack over flow でクラッシュすることが多いと思いますが、Postgres の場合は
max_stack_depth で自ら上限を設けて早めにエラーにすることで、クラッシュを
避けている……はずでしたが、上手く働かないケースがあるのかもしれません。

--
Itagaki Takahiro

投稿者 xml-rpc : 2010年12月 3日 13:53
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/100571
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。