У меня есть следующий запрос в postgres.Обновление с блокировкой строк
CREATE SCHEMA s;
CREATE TABLE s.t1 (
"id1" Bigint,
"id2" Bigint,
"id3" Boolean DEFAULT false NOT NULL,
CONSTRAINT "pk1" PRIMARY KEY (id1)
)
WITH(OIDS=FALSE);
INSERT INTO s.t1 (id1, id2, id3) VALUES (1, 22, true);
INSERT INTO s.t1 (id1, id2) VALUES (2, 22);
INSERT INTO s.t1 (id1, id2) VALUES (3, 33);
SELECT EXISTS (SELECT 1 FROM s.t1 WHERE id2 = 22 and id3 = true FOR UPDATE); /* Does it take a lock on the row. */
SELECT id3 FROM s.t1 WHERE id2 = 22 and id3 = true FOR UPDATE; /* Takes a lock on the row. */
DROP SCHEMA s CASCADE;
Я понимаю, что второй запрос принимает блокировку (при запуске по транзакции) в конкретной строке. Ни один другой запрос не сможет получить доступ к строке до момента совершения транзакции.
Выполняет ли первый запрос блокировку строки при выполнении транзакции?
Благодаря