1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-17 06:41:24 +03:00

tests: Restrict pg_locks queries in advisory_locks.sql to current database

Otherwise testing an existing installation can fail, if there are other locks,
e.g. from one of the isolation tests.

This was originally applied as c3315a7da57b in 16~, but it is possible
to see this test fail depending on the concurrent activity for older
active branches.

Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/20221003234111.4ob7yph6r4g4ywhu@awork3.anarazel.de
Backpatch-through: 12
This commit is contained in:
Andres Freund 2022-10-05 10:44:38 -07:00 committed by Michael Paquier
parent 9db4598c9c
commit f232d7c682
2 changed files with 33 additions and 30 deletions

View File

@ -1,6 +1,7 @@
-- --
-- ADVISORY LOCKS -- ADVISORY LOCKS
-- --
SELECT oid AS datoid FROM pg_database WHERE datname = current_database() \gset
BEGIN; BEGIN;
SELECT SELECT
pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2), pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2),
@ -11,7 +12,7 @@ SELECT
(1 row) (1 row)
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -28,7 +29,7 @@ SELECT pg_advisory_unlock_all();
(1 row) (1 row)
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count count
------- -------
4 4
@ -49,7 +50,7 @@ WARNING: you don't own a lock of type ShareLock
-- automatically release xact locks at commit -- automatically release xact locks at commit
COMMIT; COMMIT;
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count count
------- -------
0 0
@ -66,7 +67,7 @@ SELECT
(1 row) (1 row)
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -86,7 +87,7 @@ SELECT
ROLLBACK; ROLLBACK;
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -111,7 +112,7 @@ WARNING: you don't own a lock of type ShareLock
t | f | t | f | t | f | t | f t | f | t | f | t | f | t | f
(1 row) (1 row)
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count count
------- -------
0 0
@ -128,7 +129,7 @@ SELECT
(1 row) (1 row)
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -148,7 +149,7 @@ SELECT
ROLLBACK; ROLLBACK;
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -165,7 +166,7 @@ SELECT pg_advisory_unlock_all();
(1 row) (1 row)
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count count
------- -------
0 0
@ -184,7 +185,7 @@ SELECT
(1 row) (1 row)
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -195,7 +196,7 @@ SELECT locktype, classid, objid, objsubid, mode, granted
(4 rows) (4 rows)
COMMIT; COMMIT;
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count count
------- -------
0 0
@ -213,7 +214,7 @@ SELECT
(1 row) (1 row)
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -233,7 +234,7 @@ SELECT
t | t | t | t | t | t | t | t t | t | t | t | t | t | t | t
(1 row) (1 row)
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count count
------- -------
0 0
@ -251,7 +252,7 @@ SELECT
(1 row) (1 row)
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
locktype | classid | objid | objsubid | mode | granted locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+--------- ----------+---------+-------+----------+---------------+---------
@ -267,7 +268,7 @@ SELECT pg_advisory_unlock_all();
(1 row) (1 row)
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count count
------- -------
0 0

View File

@ -2,6 +2,8 @@
-- ADVISORY LOCKS -- ADVISORY LOCKS
-- --
SELECT oid AS datoid FROM pg_database WHERE datname = current_database() \gset
BEGIN; BEGIN;
SELECT SELECT
@ -9,14 +11,14 @@ SELECT
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2); pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2);
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
-- pg_advisory_unlock_all() shouldn't release xact locks -- pg_advisory_unlock_all() shouldn't release xact locks
SELECT pg_advisory_unlock_all(); SELECT pg_advisory_unlock_all();
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
-- can't unlock xact locks -- can't unlock xact locks
@ -28,7 +30,7 @@ SELECT
-- automatically release xact locks at commit -- automatically release xact locks at commit
COMMIT; COMMIT;
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
BEGIN; BEGIN;
@ -39,7 +41,7 @@ SELECT
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2); pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2);
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
SELECT SELECT
@ -49,7 +51,7 @@ SELECT
ROLLBACK; ROLLBACK;
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
@ -60,7 +62,7 @@ SELECT
pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1),
pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2); pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2);
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
BEGIN; BEGIN;
@ -71,7 +73,7 @@ SELECT
pg_advisory_lock(1, 1), pg_advisory_lock_shared(2, 2); pg_advisory_lock(1, 1), pg_advisory_lock_shared(2, 2);
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
SELECT SELECT
@ -81,14 +83,14 @@ SELECT
ROLLBACK; ROLLBACK;
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
-- releasing all session locks -- releasing all session locks
SELECT pg_advisory_unlock_all(); SELECT pg_advisory_unlock_all();
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
BEGIN; BEGIN;
@ -102,12 +104,12 @@ SELECT
pg_advisory_xact_lock_shared(2, 2), pg_advisory_xact_lock_shared(2, 2); pg_advisory_xact_lock_shared(2, 2), pg_advisory_xact_lock_shared(2, 2);
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
COMMIT; COMMIT;
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
-- grabbing session locks multiple times -- grabbing session locks multiple times
@ -118,7 +120,7 @@ SELECT
pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2); pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2);
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
SELECT SELECT
@ -127,7 +129,7 @@ SELECT
pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1),
pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2); pg_advisory_unlock_shared(2, 2), pg_advisory_unlock_shared(2, 2);
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
-- .. and releasing them all at once -- .. and releasing them all at once
@ -138,9 +140,9 @@ SELECT
pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2); pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2);
SELECT locktype, classid, objid, objsubid, mode, granted SELECT locktype, classid, objid, objsubid, mode, granted
FROM pg_locks WHERE locktype = 'advisory' FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
ORDER BY classid, objid, objsubid; ORDER BY classid, objid, objsubid;
SELECT pg_advisory_unlock_all(); SELECT pg_advisory_unlock_all();
SELECT count(*) FROM pg_locks WHERE locktype = 'advisory'; SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;