私は最近、postgresが制約を排除していることを発見しました。これは、私が尋ねたことをexcatlyできるようにします(数字範囲の型はまだ存在しないため、RDBMS(トランザクションセーフ)で重複しない範囲を強制する方法は?
oracleと他のRDBMSには、制約を除外する同等の機能はありません。このようなテーブルトランザクションを安全に挿入する唯一の機会は、テーブルをロックすることです。それとも別の方法がありますか?
編集:(@ Clodoaldo) 2つのトランザクションが競合するレコードを挿入すると、postgresは行レベルのロックを使用します。私の質問です:RDBMSが除外制約を備えていない場合、重複しない範囲とトランザクションの安全性が必要な場合は、テーブル全体をロックする以外の方法はないと思います。それとも私が気づいていない方法がありますか?
時々、重複しない範囲のテーブルを数回設計する必要がありました。私はデータベースでデータの一貫性を保証するトランザクション安全な方法を知らなかった。除外の制約について読んだとき、私はその問題を解決したと思ったが、それは非標準的なので、私の上司はそれを使用することに非常に熱心ではない。
排除制約に導入するためにマニュアルを読む必要がありましたが、私はあなたの質問についてまだ混乱しています。あなたはそれを詳述できますか?排他制約のあるテーブルに挿入するときにもロックが発生しませんか? –
私はそれについて知らない。 Postgresは、2つの競合する挿入トランザクションのうちの2番目がコミットするときに、排他制約に必要なインデックスを使用してエラーをスローすると考えました。次の日に、除外制約を試してみましょう。 – plainswalker