Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/test/regress/sql/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 4 kB image not shown  

Quelle  advisory_lock.sql

  Sprache: SQL
 

--
-- 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),
 pg_advisory_xact_lock(11), pg_advisory_xact_lock_shared(22);

SELECT locktype, classid, objid, objsubid, mode, granted
 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' AND database = :datoid;


-- can't unlock xact locks
SELECT
 pg_advisory_unlock(1), pg_advisory_unlock_shared(2),
 pg_advisory_unlock(11), pg_advisory_unlock_shared(22);


-- automatically release xact locks at commit
COMMIT;

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;


BEGIN;

-- holding both session and xact locks on the same objects, xact first
SELECT
 pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2),
 pg_advisory_xact_lock(11), pg_advisory_xact_lock_shared(22);

SELECT locktype, classid, objid, objsubid, mode, granted
 FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
 ORDER BY classid, objid, objsubid;

SELECT
 pg_advisory_lock(1), pg_advisory_lock_shared(2),
 pg_advisory_lock(11), pg_advisory_lock_shared(22);

ROLLBACK;

SELECT locktype, classid, objid, objsubid, mode, granted
 FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
 ORDER BY classid, objid, objsubid;


-- unlocking session locks
SELECT
 pg_advisory_unlock(1), pg_advisory_unlock(1),
 pg_advisory_unlock_shared(2), pg_advisory_unlock_shared(2),
 pg_advisory_unlock(11), pg_advisory_unlock(11),
 pg_advisory_unlock_shared(22), pg_advisory_unlock_shared(22);

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;


BEGIN;

-- holding both session and xact locks on the same objects, session first
SELECT
 pg_advisory_lock(1), pg_advisory_lock_shared(2),
 pg_advisory_lock(11), pg_advisory_lock_shared(22);

SELECT locktype, classid, objid, objsubid, mode, granted
 FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
 ORDER BY classid, objid, objsubid;

SELECT
 pg_advisory_xact_lock(1), pg_advisory_xact_lock_shared(2),
 pg_advisory_xact_lock(11), pg_advisory_xact_lock_shared(22);

ROLLBACK;

SELECT locktype, classid, objid, objsubid, mode, granted
 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' AND database = :datoid;


BEGIN;

-- grabbing txn locks multiple times

SELECT
 pg_advisory_xact_lock(1), pg_advisory_xact_lock(1),
 pg_advisory_xact_lock_shared(2), pg_advisory_xact_lock_shared(2),
 pg_advisory_xact_lock(11), pg_advisory_xact_lock(11),
 pg_advisory_xact_lock_shared(22), pg_advisory_xact_lock_shared(22);

SELECT locktype, classid, objid, objsubid, mode, granted
 FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
 ORDER BY classid, objid, objsubid;

COMMIT;

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;

-- grabbing session locks multiple times

SELECT
 pg_advisory_lock(1), pg_advisory_lock(1),
 pg_advisory_lock_shared(2), pg_advisory_lock_shared(2),
 pg_advisory_lock(11), pg_advisory_lock(11),
 pg_advisory_lock_shared(22), pg_advisory_lock_shared(22);

SELECT locktype, classid, objid, objsubid, mode, granted
 FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid
 ORDER BY classid, objid, objsubid;

SELECT
 pg_advisory_unlock(1), pg_advisory_unlock(1),
 pg_advisory_unlock_shared(2), pg_advisory_unlock_shared(2),
 pg_advisory_unlock(11), pg_advisory_unlock(11),
 pg_advisory_unlock_shared(22), pg_advisory_unlock_shared(22);

SELECT count(*) FROM pg_locks WHERE locktype = 'advisory' AND database = :datoid;

-- .. and releasing them all at once

SELECT
 pg_advisory_lock(1), pg_advisory_lock(1),
 pg_advisory_lock_shared(2), pg_advisory_lock_shared(2),
 pg_advisory_lock(11), pg_advisory_lock(11),
 pg_advisory_lock_shared(22), pg_advisory_lock_shared(22);

SELECT locktype, classid, objid, objsubid, mode, granted
 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' AND database = :datoid;

Messung V0.5 in Prozent
C=84 H=96 G=90

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.