查询PostgreSQL中分区表的竞争条件?

时间:2018-03-21 16:58:25

标签: postgresql postgresql-10

假设PostgreSQL 10.3和Read Committed:如果其中一个分区被另一个进程修改,对分区表的查询是否会引入竞争条件?

E.g。给定这个架构:

CREATE TABLE foo (
    id VARCHAR,
    state VARCHAR
) PARTITION BY LIST(state);
CREATE TABLE foo_pending PARTITION OF foo FOR VALUES IN ('pending');
CREATE TABLE foo_ready PARTITION OF foo FOR VALUES IN ('ready');

我们说我有一个查询过程:

SELECT * FROM foo WHERE id = 'something';

另一个过程:

BEGIN TRANSACTION;
DELETE FROM foo_ready WHERE id = 'something';
INSERT INTO foo_pending VALUES ('something', 'pending');
COMMIT;

第一个进程是否可能在分区foo_pending中找不到匹配的行(因为它在提交的另一个进程之前获取),而foo_ready中没有匹配的行(因为它在另一个进程之后获取)提交)?

我是否需要SERIALIZABLE(或REPEATABLE READ)才能解决此问题?

0 个答案:

没有答案