pgsql: Support triggers on views.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Support triggers on views.
Date: 2010-10-10 17:46:15
Message-ID: E1P4zyR-0000wg-Q9@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Support triggers on views.

This patch adds the SQL-standard concept of an INSTEAD OF trigger, which
is fired instead of performing a physical insert/update/delete. The
trigger function is passed the entire old and/or new rows of the view,
and must figure out what to do to the underlying tables to implement
the update. So this feature can be used to implement updatable views
using trigger programming style rather than rule hacking.

In passing, this patch corrects the names of some columns in the
information_schema.triggers view. It seems the SQL committee renamed
them somewhere between SQL:99 and SQL:2003.

Dean Rasheed, reviewed by Bernd Helmle; some additional hacking by me.

Branch
------
master

Details
-------
http://git.postgresql.org/gitweb?p=postgresql.git;a=commitdiff;h=2ec993a7cbdd8e251817ac6bbc9a704ce8346f73

Modified Files
--------------
doc/src/sgml/catalogs.sgml | 9 +-
doc/src/sgml/information_schema.sgml | 61 ++-
doc/src/sgml/plperl.sgml | 4 +-
doc/src/sgml/plpgsql.sgml | 106 ++++-
doc/src/sgml/plpython.sgml | 20 +-
doc/src/sgml/pltcl.sgml | 16 +-
doc/src/sgml/ref/create_rule.sgml | 10 +-
doc/src/sgml/ref/create_trigger.sgml | 106 ++++-
doc/src/sgml/rules.sgml | 162 +++++---
doc/src/sgml/trigger.sgml | 140 +++++--
src/backend/catalog/index.c | 2 +-
src/backend/catalog/information_schema.sql | 38 ++-
src/backend/catalog/sql_features.txt | 2 +-
src/backend/commands/copy.c | 2 +-
src/backend/commands/tablecmds.c | 6 +-
src/backend/commands/trigger.c | 577 +++++++++++++----------
src/backend/executor/execMain.c | 44 ++-
src/backend/executor/nodeModifyTable.c | 499 +++++++++++++-------
src/backend/nodes/copyfuncs.c | 2 +-
src/backend/nodes/equalfuncs.c | 2 +-
src/backend/optimizer/prep/preptlist.c | 50 +--
src/backend/parser/gram.y | 19 +-
src/backend/rewrite/rewriteHandler.c | 252 ++++++++---
src/backend/rewrite/rewriteManip.c | 2 +-
src/backend/utils/adt/ruleutils.c | 7 +-
src/bin/pg_dump/pg_dump.c | 12 +-
src/bin/psql/describe.c | 23 +-
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_trigger.h | 31 ++-
src/include/commands/trigger.h | 58 ++-
src/include/nodes/parsenodes.h | 5 +-
src/include/utils/rel.h | 41 +-
src/pl/plperl/expected/plperl_trigger.out | 78 +++
src/pl/plperl/plperl.c | 2 +
src/pl/plperl/sql/plperl_trigger.sql | 14 +
src/pl/plpgsql/src/pl_exec.c | 4 +-
src/pl/plpython/expected/plpython_trigger.out | 78 +++-
src/pl/plpython/plpython.c | 2 +
src/pl/plpython/sql/plpython_trigger.sql | 17 +
src/pl/tcl/expected/pltcl_queries.out | 36 ++
src/pl/tcl/expected/pltcl_queries_1.out | 36 ++
src/pl/tcl/expected/pltcl_setup.out | 4 +
src/pl/tcl/pltcl.c | 2 +
src/pl/tcl/sql/pltcl_queries.sql | 6 +-
src/pl/tcl/sql/pltcl_setup.sql | 5 +
src/test/regress/expected/triggers.out | 625 +++++++++++++++++++++++++
src/test/regress/sql/triggers.sql | 357 ++++++++++++++
47 files changed, 2816 insertions(+), 760 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2010-10-10 22:43:16 pgsql: Teach psql to do tab completion for names of psql variables.
Previous Message User Hinoue 2010-10-10 16:19:46 psqlodbc - psqlodbc: Oops forgot to add files for GSSAPI authentication.