mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Add a WHEN clause to CREATE TRIGGER, allowing a boolean expression to be
checked to determine whether the trigger should be fired. For BEFORE triggers this is mostly a matter of spec compliance; but for AFTER triggers it can provide a noticeable performance improvement, since queuing of a deferred trigger event and re-fetching of the row(s) at end of statement can be short-circuited if the trigger does not need to be fired. Takahiro Itagaki, reviewed by KaiGai Kohei.
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
* by PostgreSQL
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.552 2009/10/14 22:14:23 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.553 2009/11/20 20:38:11 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -4305,10 +4305,15 @@ getTriggers(TableInfo tblinfo[], int numTables)
|
||||
resetPQExpBuffer(query);
|
||||
if (g_fout->remoteVersion >= 80500)
|
||||
{
|
||||
/*
|
||||
* NB: think not to use pretty=true in pg_get_triggerdef. It
|
||||
* could result in non-forward-compatible dumps of WHEN clauses
|
||||
* due to under-parenthesization.
|
||||
*/
|
||||
appendPQExpBuffer(query,
|
||||
"SELECT tgname, "
|
||||
"tgfoid::pg_catalog.regproc AS tgfname, "
|
||||
"pg_catalog.pg_get_triggerdef(oid, true) AS tgdef, "
|
||||
"pg_catalog.pg_get_triggerdef(oid, false) AS tgdef, "
|
||||
"tgenabled, tableoid, oid "
|
||||
"FROM pg_catalog.pg_trigger t "
|
||||
"WHERE tgrelid = '%u'::pg_catalog.oid "
|
||||
@@ -11323,6 +11328,7 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
|
||||
appendPQExpBuffer(query, " OR UPDATE");
|
||||
else
|
||||
appendPQExpBuffer(query, " UPDATE");
|
||||
findx++;
|
||||
}
|
||||
if (TRIGGER_FOR_TRUNCATE(tginfo->tgtype))
|
||||
{
|
||||
@@ -11330,6 +11336,7 @@ dumpTrigger(Archive *fout, TriggerInfo *tginfo)
|
||||
appendPQExpBuffer(query, " OR TRUNCATE");
|
||||
else
|
||||
appendPQExpBuffer(query, " TRUNCATE");
|
||||
findx++;
|
||||
}
|
||||
appendPQExpBuffer(query, " ON %s\n",
|
||||
fmtId(tbinfo->dobj.name));
|
||||
|
Reference in New Issue
Block a user