Fantom okumalarını önlemek veya Postgres işleminde eksik bir satır kilitlemek mümkün mü? bağlantı 2,Postgres'de fantom okumaları nasıl önlenir?
CREATE TABLE weather (city varchar(80) PRIMARY KEY);
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
INSERT INTO weather VALUES ('a');
arada:
1 bağlantısının: Örneğin, aşağıdaki komut dizisi dikkate
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM weather WHERE city = 'a' FOR SHARE;
INSERT INTO weather VALUES ('b');
ve geri bağlantı ila 1:
COMMIT;
Ve tekrar 2 numaralı bağlantıya geri dönün:
COMMIT;
SELECT * FROM weather;
-- Shows both rows
Bağlantı 2'deki işlemin başarılı olması mümkün görünmüyor, çünkü 'b' satırının oluşturulmasındaki önkoşul, satır 'a'nın yokluğuna bağlıydı. İkinci işlemin başarılı olmasını nasıl engellerim? Bütün tablo kilitlemeden bunu yapmanın
PostgreSQL Versiyonu –
psql (PostgreSQL) 9.3.11 –
Davranışsal işlemler, davranışların * bu işlemlerin seri olarak sipariş edilmesiyle tutarlı olduğu sürece başarılı olabilir, ancak bu siparişlerin, bu işlemlerin başlatıldığı veya işlendiği sırayla bir ilgisi yoktur. . Bu durumda, eğer işlem 2'yi takiben işlem 1'i çalıştırmış olsaydınız aynı sonucu elde edersiniz, bu yüzden bir anlaşmazlık için herhangi bir sebep göremiyorum. –