From: | William Temperley <willtemperley(at)gmail(dot)com> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Triggers and locking |
Date: | 2010-09-21 14:13:33 |
Message-ID: | AANLkTi=GrmNSKJ6JnHAp1di=eO+X2PVO9HQPGVrFFoDi@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Dear all,
I have a single "source" table that is referenced by six
specialization tables, which include:
"journal_article"
"report"
4 more....
There is a "citation" column in the source, which is what will be
displayed to users. This is generated by a trigger function on each
specialization table that calls a function to generate the citation,
and saves it on the "source" table.
Running the function get_report_citation(<source>, <report>) takes
~2ms, but when run as a trigger it takes ~5000 ms!
e.g.:
"""
update source set citation = get_report_citation(
(select source from source where id = NEW.source_ptr_id),
NEW
);
"""
If I take the citation out of line, this time is reduced to ~300ms,
but that's still v slow:
"""
cit = get_report_citation((select source from source where id =
NEW.source_ptr_id), NEW);
update source set citation = cit;
"""
If I use the following hack in this trigger, which forces the source
row to update itself (with a separate trigger) it takes >6000ms!
"""
update source set citation = '';
"""
Looking in the server monitor, there appears to be a lot of locking
happening that I don't fully understand.
Would anyone know of a better method here?
I'm on 8.3.11.
Thanks
Will Temperley
From | Date | Subject | |
---|---|---|---|
Next Message | Henri De Feraudy | 2010-09-21 15:04:26 | trying to use libpq in Ubuntu |
Previous Message | Grzegorz Jaśkiewicz | 2010-09-21 13:17:47 | Re: Reclaiming space |