--
-- ADVISORY LOCKS
--
+SELECT oid AS datoid FROM pg_database WHERE datname = current_database() \gset
BEGIN;
SELECT
pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2),
(1 row)
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
(1 row)
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count
-------
4
-- automatically release xact locks at commit
COMMIT;
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count
-------
0
(1 row)
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
ROLLBACK;
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
t | f | t | f | t | f | t | f
(1 row)
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count
-------
0
(1 row)
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
ROLLBACK;
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
(1 row)
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count
-------
0
(1 row)
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
(4 rows)
COMMIT;
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count
-------
0
(1 row)
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
t | t | t | t | t | t | t | t
(1 row)
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count
-------
0
(1 row)
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;
locktype | classid | objid | objsubid | mode | granted
----------+---------+-------+----------+---------------+---------
(1 row)
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
count
-------
0
-- ADVISORY LOCKS
--
+SELECT oid AS datoid FROM pg_database WHERE datname = current_database() \gset
+
BEGIN;
SELECT
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2);
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;
-- pg_advisory_unlock_all() shouldn't release xact locks
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
-- automatically release xact locks at commit
COMMIT;
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;
BEGIN;
pg_advisory_xact_lock(1, 1), pg_advisory_xact_lock_shared(2, 2);
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;
SELECT
ROLLBACK;
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;
pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1),
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;
pg_advisory_lock(1, 1), pg_advisory_lock_shared(2, 2);
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;
SELECT
ROLLBACK;
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;
-- releasing all session locks
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;
pg_advisory_xact_lock_shared(2, 2), pg_advisory_xact_lock_shared(2, 2);
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;
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
pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2);
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;
SELECT
pg_advisory_unlock(1, 1), pg_advisory_unlock(1, 1),
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
pg_advisory_lock_shared(2, 2), pg_advisory_lock_shared(2, 2);
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;
SELECT pg_advisory_unlock_all();
-SELECT count(*) FROM pg_locks WHERE locktype = 'advisory';
+SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;