|
分類:[データベース全般]
こんにちは。
DBのpostgresql 9.x について教えて下さい。
行単位トリガーのBEFORE INSERTでユニークな番号を自動採番 「max(xxx) + 1」したいと考えています。
同時実行を考えた場合、 BEFORE INSERTのトリガーと、実際にINSERTが実行される間に 処理が割り込まれることはあるのでしょうか? 下記のイメージです。
(1)ユーザAがINSERT Aを発行する (2)ユーザBがINSERT Bを発行する (3)INSERT AのBEFORE INSERTが実行される (4)INSERT BのBEFORE INSERTが実行される <--割り込み (5)INSERT AのINSERTが実行される (6)INSERT BのINSERTが実行される
あるとした場合、自動採番した番号が重複する可能性があるため ロックをかける必要があると考えます。
トリガー内で行ロック(SELECT 〜 FOR UPDATE)を掛けた場合、 INSERTを発行する側で明示的なコミットが必要となるのでしょうか?
実際は「年月日+連番」の形式で年月日ごとに 1 から採番する予定です。 現在 postgresql が稼動している環境はありません。 机上で学習(?)の状態です。
よろしくお願いします。
|