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

Itagaki Takahiro itagaki.takahiro @ gmail.com
2010年 12月 3日 (金) 13:53:38 JST


2010/12/2  <toshihideka4316 @ zenrin.co.jp>:
> また、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


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