-- directory paths and dlsuffix are passed to us in environment variables
\getenv libdir PG_LIBDIR
\getenv dlsuffix PG_DLSUFFIX
\set regresslib :libdir '/regress' :dlsuffix
-- Setup CREATESCHEMA lock_schema1; SET search_path = lock_schema1; CREATETABLE lock_tbl1 (a BIGINT); CREATETABLE lock_tbl1a (a BIGINT); CREATE VIEW lock_view1 ASSELECT * FROM lock_tbl1; CREATE VIEW lock_view2(a,b) ASSELECT * FROM lock_tbl1, lock_tbl1a; CREATE VIEW lock_view3 ASSELECT * from lock_view2; CREATE VIEW lock_view4 ASSELECT (select a from lock_tbl1a limit1) from lock_tbl1; CREATE VIEW lock_view5 ASSELECT * from lock_tbl1 where a in (select * from lock_tbl1a); CREATE VIEW lock_view6 ASSELECT * from (select * from lock_tbl1) sub; CREATE ROLE regress_rol_lock1; ALTER ROLE regress_rol_lock1 SET search_path = lock_schema1; GRANTUSAGEONSCHEMA lock_schema1 TO regress_rol_lock1;
-- Try all valid lock options; also try omitting the optional TABLE keyword.
BEGIN TRANSACTION; LOCKTABLE lock_tbl1 IN ACCESS SHARE MODE; LOCK lock_tbl1 IN ROW SHARE MODE; LOCKTABLE lock_tbl1 IN ROW EXCLUSIVE MODE; LOCKTABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE; LOCKTABLE lock_tbl1 IN SHARE MODE; LOCK lock_tbl1 IN SHARE ROW EXCLUSIVE MODE; LOCKTABLE lock_tbl1 IN EXCLUSIVE MODE; LOCKTABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE;
ROLLBACK;
-- Try using NOWAIT along with valid options.
BEGIN TRANSACTION; LOCKTABLE lock_tbl1 IN ACCESS SHARE MODE NOWAIT; LOCKTABLE lock_tbl1 IN ROW SHARE MODE NOWAIT; LOCKTABLE lock_tbl1 IN ROW EXCLUSIVE MODE NOWAIT; LOCKTABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE NOWAIT; LOCKTABLE lock_tbl1 IN SHARE MODE NOWAIT; LOCKTABLE lock_tbl1 IN SHARE ROW EXCLUSIVE MODE NOWAIT; LOCKTABLE lock_tbl1 IN EXCLUSIVE MODE NOWAIT; LOCKTABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE NOWAIT;
ROLLBACK;
-- Verify that we can lock views.
BEGIN TRANSACTION; LOCKTABLE lock_view1 IN EXCLUSIVE MODE; -- lock_view1 and lock_tbl1 are locked. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'ExclusiveLock' orderby relname;
ROLLBACK;
BEGIN TRANSACTION; LOCKTABLE lock_view2 IN EXCLUSIVE MODE; -- lock_view1, lock_tbl1, and lock_tbl1a are locked. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'ExclusiveLock' orderby relname;
ROLLBACK;
BEGIN TRANSACTION; LOCKTABLE lock_view3 IN EXCLUSIVE MODE; -- lock_view3, lock_view2, lock_tbl1, and lock_tbl1a are locked recursively. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'ExclusiveLock' orderby relname;
ROLLBACK;
BEGIN TRANSACTION; LOCKTABLE lock_view4 IN EXCLUSIVE MODE; -- lock_view4, lock_tbl1, and lock_tbl1a are locked. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'ExclusiveLock' orderby relname;
ROLLBACK;
BEGIN TRANSACTION; LOCKTABLE lock_view5 IN EXCLUSIVE MODE; -- lock_view5, lock_tbl1, and lock_tbl1a are locked. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'ExclusiveLock' orderby relname;
ROLLBACK;
BEGIN TRANSACTION; LOCKTABLE lock_view6 IN EXCLUSIVE MODE; -- lock_view6 an lock_tbl1 are locked. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'ExclusiveLock' orderby relname;
ROLLBACK; -- Verify that we cope with infinite recursion in view definitions. CREATEORREPLACE VIEW lock_view2 ASSELECT * from lock_view3;
BEGIN TRANSACTION; LOCKTABLE lock_view2 IN EXCLUSIVE MODE;
ROLLBACK; CREATE VIEW lock_view7 ASSELECT * from lock_view2;
BEGIN TRANSACTION; LOCKTABLE lock_view7 IN EXCLUSIVE MODE;
ROLLBACK;
-- Verify that we can lock a table with inheritance children. CREATETABLE lock_tbl2 (b BIGINT) INHERITS (lock_tbl1); CREATETABLE lock_tbl3 () INHERITS (lock_tbl2);
BEGIN TRANSACTION; LOCKTABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
ROLLBACK;
-- Child tables are locked without granting explicit permission to do so as -- long as we have permission to lock the parent. GRANTUPDATEONTABLE lock_tbl1 TO regress_rol_lock1; SET ROLE regress_rol_lock1; -- fail when child locked directly
BEGIN; LOCKTABLE lock_tbl2;
ROLLBACK;
BEGIN; LOCKTABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
ROLLBACK;
BEGIN; LOCKTABLE ONLY lock_tbl1;
ROLLBACK;
RESET ROLE; REVOKEUPDATEONTABLE lock_tbl1 FROM regress_rol_lock1;
-- Tables referred to by views are locked without explicit permission to do so -- as long as we have permission to lock the view itself. SET ROLE regress_rol_lock1; -- fail without permissions on the view
BEGIN; LOCKTABLE lock_view1;
ROLLBACK;
RESET ROLE; GRANTUPDATEONTABLE lock_view1 TO regress_rol_lock1; SET ROLE regress_rol_lock1;
BEGIN; LOCKTABLE lock_view1 IN ACCESS EXCLUSIVE MODE; -- lock_view1 and lock_tbl1 (plus children lock_tbl2 and lock_tbl3) are locked. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'AccessExclusiveLock' orderby relname;
ROLLBACK;
RESET ROLE; REVOKEUPDATEONTABLE lock_view1 FROM regress_rol_lock1;
-- Tables referred to by security invoker views require explicit permission to -- be locked. CREATE VIEW lock_view8 WITH (security_invoker) ASSELECT * FROM lock_tbl1; SET ROLE regress_rol_lock1; -- fail without permissions on the view
BEGIN; LOCKTABLE lock_view8;
ROLLBACK;
RESET ROLE; GRANTUPDATEONTABLE lock_view8 TO regress_rol_lock1; SET ROLE regress_rol_lock1; -- fail without permissions on the table referenced by the view
BEGIN; LOCKTABLE lock_view8;
ROLLBACK;
RESET ROLE; GRANTUPDATEONTABLE lock_tbl1 TO regress_rol_lock1;
BEGIN; LOCKTABLE lock_view8 IN ACCESS EXCLUSIVE MODE; -- lock_view8 and lock_tbl1 (plus children lock_tbl2 and lock_tbl3) are locked. select relname from pg_locks l, pg_class c where l.relation = c.oid and relname like'%lock_%'and mode = 'AccessExclusiveLock' orderby relname;
ROLLBACK;
RESET ROLE; REVOKEUPDATEONTABLE lock_view8 FROM regress_rol_lock1;
-- -- Clean up -- DROP VIEW lock_view8; DROP VIEW lock_view7; DROP VIEW lock_view6; DROP VIEW lock_view5; DROP VIEW lock_view4; DROP VIEW lock_view3 CASCADE; DROP VIEW lock_view1; DROPTABLE lock_tbl3; DROPTABLE lock_tbl2; DROPTABLE lock_tbl1; DROPTABLE lock_tbl1a; DROPSCHEMA lock_schema1 CASCADE; DROP ROLE regress_rol_lock1;
-- atomic ops tests
RESET search_path;
CREATE FUNCTION test_atomic_ops()
RETURNS bool AS :'regresslib'
LANGUAGE C;
SELECT test_atomic_ops();
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-08-08)
¤
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.