Search Postgresql Archives

Triggers and locking

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

 



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

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[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