[pgsql-jp: 28825] Re: シーケンスの利用について

Mashiki mashiki @ yanah.com
2003年 1月 29日 (水) 09:17:49 JST


 Mashikiです。

>すがわらです。
>
>> 動きからして、インサート文のカラムの並びでなく、テーブルの定義の順に
>> カラムのvaluesが評価されているように見えます。
>> ちなみに、case1とcase2の順序を逆にして流すと、エラーになります。
>> 
>> アプリケーション内で書く場合、注意が必要ですね。
>
>今までテーブルの定義順にしかインサートしたことがなかったので、
>気づきませんでした。参考になりました。注意しないといけないですね。

仕様書を見直した際、列の順番だけ入換えたのですが、プログラムは
そのままにしたため、今回のトラブルが発生しました。

>> 何故、このような仕様になっているのでしょうか?
>
>記述した順ではなく、単に式が評価される順に実行される仕様という
>ことではないでしょうか。

その「式が評価される順」が、SQL文を見ただけではわからないという
のが、もどかしいですね。「カンマで区切られた『式』は左から評価さ
れる」とかよくあるプログラミング言語のお約束みたいになっていると、
わかりやすいんですが。

>これと似た現象はselect文でも発生します。selectの結果に連番を付
>けるためシーケンスを使ったりしますが、その際記述した順番ではなく
>クエリーのプランの順番にしたがって呼び出されます。そのため、思っ
>た通り順番が振られない場合があるようです(回避する方法はあります)。
>特に、サブクエリーで使用した場合は注意が必要なようです。

なるほどです。

呼び出し順により結果が変わるユーザー定義関数を、呼び出す場合も、
同じ注意が必要になりそうですね。



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