【问题标题】:Does postgres "SELECT FOR UPDATE" restrict to create new foreign key references ?postgres“SELECT FOR UPDATE”是否限制创建新的外键引用?
【发布时间】:2017-11-17 22:16:52
【问题描述】:

有两个表,一个被另一个具有外键约束的引用。

CREATE TABLE record
(
  id                    UUID PRIMARY KEY  NOT NULL
);    

CREATE TABLE task
(
  id                    UUID PRIMARY KEY  NOT NULL,
  record_id       UUID,
  CONSTRAINT fk_task_record_id FOREIGN KEY (record_id) 
  REFERENCES record (id)
);

问题是:如果record 行上的锁定被

SELECT * FROM record where id = 'A' FOR UPDATE OF record

我可以在task 表中创建新的外键并引用这个record 行吗 ?

INSERT INTO task VALUES ('someId', 'A');

Postgres 是否阻止在被SELECT FOR UPDATE OF 锁定的表上创建新的外键引用?

【问题讨论】:

    标签: postgresql locking


    【解决方案1】:

    不,它没有。

    select .. for update 仅阻止对该行的更改(更新、删除)。

    它不会阻止其他事务读取该行,这就是插入行引用锁定行所必需的。

    【讨论】:

    • 除了锁定整个表之外,您能建议防止创建新引用的方法吗?
    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多