|
|
@ -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; |
|
|
|