deadlock.sql

application/octet-stream

Filename: deadlock.sql
Type: application/octet-stream
Part: 0
Message: Deadlock bug
DROP TABLE B;
DROP TABLE A;
DROP VIEW vLocks;

CREATE TABLE A (
AID integer not null,
Col1 integer,
PRIMARY KEY (AID)
);


CREATE TABLE B (
BID integer not null,
AID integer not null,
Col2 integer,
PRIMARY KEY (BID),
FOREIGN KEY (AID) REFERENCES A(AID)
);

INSERT INTO A (AID) VALUES (1);
INSERT INTO B (BID,AID) VALUES (2,1);

CREATE VIEW vLocks AS SELECT clock_timestamp(),pg_class.relname,pg_locks.locktype,pg_locks.database,pg_locks.relation,pg_locks.page,pg_locks.tuple,
pg_locks.virtualtransaction,pg_locks.pid,pg_locks.mode,pg_locks.granted FROM pg_locks
JOIN pg_class ON pg_locks.relation = pg_class.oid WHERE relname !~ '^pg_' and relname <> 'vlocks';

Process 1:                                Process 2:
BEGIN;
SELECT pg_backend_pid();
                                                        BEGIN;
                                                        SELECT pg_backend_pid();
UPDATE A SET Col1 = 1 WHERE AID = 1;
SELECT * FROM vLocks WHERE PID IN (2165,2157);
                                                        UPDATE B SET Col2 = 1 WHERE BID = 2;
                                                        SELECT * FROM vLocks WHERE PID IN (2165,2157);
UPDATE B SET Col2 = 1 WHERE BID = 2;
SELECT * FROM vLocks WHERE PID IN (2165,2157);
                                                        UPDATE B SET Col2 = 1 WHERE BID = 2;
                                                        SELECT * FROM vLocks WHERE PID IN (2165,2157);


http://screencast.com/t/NTk2Y2VhMW