|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.453 2008/11/03 20:17:20 adunstan Exp $ --> |
|
|
|
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.454 2008/11/04 00:59:45 momjian Exp $ --> |
|
|
|
|
|
|
|
|
|
<chapter id="functions"> |
|
|
|
|
<title>Functions and Operators</title> |
|
|
|
|
@ -12855,46 +12855,46 @@ SELECT (pg_stat_file('filename')).modification; |
|
|
|
|
|
|
|
|
|
<para> |
|
|
|
|
Currently <productname>PostgreSQL</> provides one built in trigger |
|
|
|
|
function, <function>suppress_redundant_updates_trigger</>, |
|
|
|
|
which will prevent any update |
|
|
|
|
that does not actually change the data in the row from taking place, in |
|
|
|
|
contrast to the normal behaviour which always performs the update |
|
|
|
|
regardless of whether or not the data has changed. (This normal behaviour |
|
|
|
|
makes updates run faster, since no checking is required, and is also |
|
|
|
|
useful in certain cases.) |
|
|
|
|
function, <function>suppress_redundant_updates_trigger</>, |
|
|
|
|
which will prevent any update |
|
|
|
|
that does not actually change the data in the row from taking place, in |
|
|
|
|
contrast to the normal behaviour which always performs the update |
|
|
|
|
regardless of whether or not the data has changed. (This normal behaviour |
|
|
|
|
makes updates run faster, since no checking is required, and is also |
|
|
|
|
useful in certain cases.) |
|
|
|
|
</para> |
|
|
|
|
|
|
|
|
|
<para> |
|
|
|
|
Ideally, you should normally avoid running updates that don't actually |
|
|
|
|
change the data in the record. Redundant updates can cost considerable |
|
|
|
|
unnecessary time, especially if there are lots of indexes to alter, |
|
|
|
|
and space in dead rows that will eventually have to be vacuumed. |
|
|
|
|
However, detecting such situations in client code is not |
|
|
|
|
always easy, or even possible, and writing expressions to detect |
|
|
|
|
them can be error-prone. An alternative is to use |
|
|
|
|
<function>suppress_redundant_updates_trigger</>, which will skip |
|
|
|
|
updates that don't change the data. You should use this with care, |
|
|
|
|
however. The trigger takes a small but non-trivial time for each record, |
|
|
|
|
so if most of the records affected by an update are actually changed, |
|
|
|
|
use of this trigger will actually make the update run slower. |
|
|
|
|
<para> |
|
|
|
|
Ideally, you should normally avoid running updates that don't actually |
|
|
|
|
change the data in the record. Redundant updates can cost considerable |
|
|
|
|
unnecessary time, especially if there are lots of indexes to alter, |
|
|
|
|
and space in dead rows that will eventually have to be vacuumed. |
|
|
|
|
However, detecting such situations in client code is not |
|
|
|
|
always easy, or even possible, and writing expressions to detect |
|
|
|
|
them can be error-prone. An alternative is to use |
|
|
|
|
<function>suppress_redundant_updates_trigger</>, which will skip |
|
|
|
|
updates that don't change the data. You should use this with care, |
|
|
|
|
however. The trigger takes a small but non-trivial time for each record, |
|
|
|
|
so if most of the records affected by an update are actually changed, |
|
|
|
|
use of this trigger will actually make the update run slower. |
|
|
|
|
</para> |
|
|
|
|
|
|
|
|
|
<para> |
|
|
|
|
The <function>suppress_redundant_updates_trigger</> function can be |
|
|
|
|
added to a table like this: |
|
|
|
|
added to a table like this: |
|
|
|
|
<programlisting> |
|
|
|
|
CREATE TRIGGER z_min_update |
|
|
|
|
BEFORE UPDATE ON tablename |
|
|
|
|
FOR EACH ROW EXECUTE PROCEDURE suppress_redundant_updates_trigger(); |
|
|
|
|
</programlisting> |
|
|
|
|
In most cases, you would want to fire this trigger last for each row. |
|
|
|
|
Bearing in mind that triggers fire in name order, you would then |
|
|
|
|
choose a trigger name that comes after the name of any other trigger |
|
|
|
|
Bearing in mind that triggers fire in name order, you would then |
|
|
|
|
choose a trigger name that comes after the name of any other trigger |
|
|
|
|
you might have on the table. |
|
|
|
|
</para> |
|
|
|
|
<para> |
|
|
|
|
<para> |
|
|
|
|
For more information about creating triggers, see |
|
|
|
|
<xref linkend="SQL-CREATETRIGGER">. |
|
|
|
|
<xref linkend="SQL-CREATETRIGGER">. |
|
|
|
|
</para> |
|
|
|
|
</sect1> |
|
|
|
|
</chapter> |
|
|
|
|
|