Search Postgresql Archives

Foreign keys and locks.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,
Today I found this behavior on two tables.

I have 2 tables t2 and t3 , described as below:

testdb=# \d t2
                     Tabella "public.t2"
 Colonna |  Tipo   | Ordinamento | Può essere null | Default
---------+---------+-------------+-----------------+---------
 id      | integer |             | not null        |
 value   | integer |             |                 |
Indici:
    "t2_id_p_key" PRIMARY KEY, btree (id)
    "t2_rate_idx" btree (value)
Referenziato da:
    TABLE "t3" CONSTRAINT "t3_roomrate_fkey" FOREIGN KEY (value) REFERENCES t2(id) ON UPDATE CASCADE ON DELETE CASCADE

testdb=# \d t3
                     Tabella "public.t3"
 Colonna |  Tipo   | Ordinamento | Può essere null | Default
---------+---------+-------------+-----------------+---------
 id      | integer |             | not null        |
 value   | integer |             |                 |
Indici:
    "t3_id_p_key" PRIMARY KEY, btree (id)
Vincoli di integrità referenziale
    "t3_roomrate_fkey" FOREIGN KEY (value) REFERENCES t2(id) ON UPDATE CASCADE ON DELETE CASCADE

the two tables are populated with records that satisfy the referential integrity constraints.

1) If I execute

testdb=# delete from t2 where id=1978800 ;

it  works;

2) but if I execute
testdb=# delete from t2 where value=20342;

postgresql applies locks and the query freezes.

testdb=# SELECT locktype, relation::regclass, mode, transactionid AS tid,
virtualtransaction AS vtid, l.pid, granted,a.query
FROM pg_catalog.pg_locks l
JOIN pg_stat_activity a on a.pid=l.pid
LEFT JOIN pg_catalog.pg_database db
ON db.oid = l.database WHERE (db.datname = 'testdb')
AND NOT l.pid = pg_backend_pid()
and a.state = 'active';
 locktype |  relation   |       mode       | tid |  vtid  | pid  | granted |               query              
----------+-------------+------------------+-----+--------+------+---------+-----------------------------------
 relation | t3_id_p_key | RowExclusiveLock |     | 9/1475 | 8685 | t       | delete from t2 where value=20342;
 relation | t3          | RowExclusiveLock |     | 9/1475 | 8685 | t       | delete from t2 where value=20342;
 relation | t2_rate_idx | RowExclusiveLock |     | 9/1475 | 8685 | t       | delete from t2 where value=20342;
 relation | t2_id_p_key | RowExclusiveLock |     | 9/1475 | 8685 | t       | delete from t2 where value=20342;
 relation | t2          | RowExclusiveLock |     | 9/1475 | 8685 | t       | delete from t2 where value=20342;


I tried to check the problem on other tables but on other tables I did not find the same behavior
and the second type of query works without problems.

Any Ideas?

Thanks in advance for your reply

Enrico


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux