小编och*_*les的帖子

如何在可序列化隔离级别为事务实现 insert-if-not-found?

我很难弄清楚如何准确实现“如果未找到则插入”功能。考虑以下。

我们有一个名为artist2 列的表,(name, id)其中name是唯一id键,是串行主键。这是一个人为的例子,但它说明了我的问题:

    SESSION A                     SESSION B
1.                                SELECT id FROM artist
                                    WHERE name = 'Bob';
2.  INSERT INTO artist (name)
      VALUES ('Bob')
3.                                INSERT INTO artist (name)
                                    VALUES ('Bob')
4.   code that users 'Bob'
     (e.g., a FK to Bob's ID)
5.                                ??? Bob already exists, but we
                                  can't find it
4.  COMMIT
Run Code Online (Sandbox Code Playgroud)

会话 B 开始尝试找到一个artist叫 Bob 的人,但失败了。但是,会话 A 然后创建了 Bob。会话 B 尝试插入名为 Bob 的艺术家,但由于违反主键而失败。但这是我明白的一点——如果我将操作 3 更改 …

postgresql transaction serialization

5
推荐指数
1
解决办法
3132
查看次数

标签 统计

postgresql ×1

serialization ×1

transaction ×1