fklock-pgrowlocks.sql
text/plain
Filename: fklock-pgrowlocks.sql
Type: text/plain
Part: 2
Message:
Re: foreign key locks, 2nd attempt
CREATE EXTENSION dblink;
CREATE EXTENSION pgrowlocks;
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM pg_proc WHERE oid = 'pgrowlocks'::regproc AND 'modes' = ANY (proargnames)) THEN
CREATE OR REPLACE VIEW remote_rowlocks AS
SELECT * FROM dblink('dbname=' || current_database(),
$q$SELECT * FROM pgrowlocks('test_rowlock')$q$)
AS t(locked_row tid, lock_type text, locker xid, multi boolean,
xids xid[], modes text[], pids integer[]);
ELSE
CREATE OR REPLACE VIEW remote_rowlocks AS
SELECT * FROM dblink('dbname=' || current_database(),
$q$SELECT * FROM pgrowlocks('test_rowlock')$q$)
AS t(locked_row tid, lock_type text, locker xid, multi boolean,
xids xid[], pids integer[]);
END IF;
END
$$;
DROP TABLE IF EXISTS test_rowlock;
CREATE TABLE test_rowlock (key_col int PRIMARY KEY, non_key_col int);
INSERT INTO test_rowlock VALUES (1,10);
BEGIN;
SELECT * FROM test_rowlock FOR KEY SHARE;
SELECT * FROM remote_rowlocks;
ROLLBACK;
BEGIN;
SELECT * FROM test_rowlock FOR SHARE;
SELECT * FROM remote_rowlocks;
ROLLBACK;
BEGIN;
SELECT * FROM test_rowlock FOR UPDATE;
SELECT * FROM remote_rowlocks;
ROLLBACK;
BEGIN;
UPDATE test_rowlock SET non_key_col = 11;
SELECT * FROM remote_rowlocks;
ROLLBACK;
BEGIN;
UPDATE test_rowlock SET key_col = 2;
SELECT * FROM remote_rowlocks;
ROLLBACK;