diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2009-12-31 14:41:23 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2009-12-31 14:41:23 +0000 |
commit | c584d11bb3a371dfca3d28f116b9c5af5f21338b (patch) | |
tree | a7403e83f35873aa12eaeb37be26544f0d7ea93b | |
parent | 31cf893088cf643b553918b2a93164c95cf6a903 (diff) | |
download | postgresql-c584d11bb3a371dfca3d28f116b9c5af5f21338b.tar.gz postgresql-c584d11bb3a371dfca3d28f116b9c5af5f21338b.zip |
Add information_schema.triggered_update_columns
This reflects the recently added support for triggers on columns.
-rw-r--r-- | doc/src/sgml/information_schema.sgml | 76 | ||||
-rw-r--r-- | src/backend/catalog/information_schema.sql | 28 |
2 files changed, 96 insertions, 8 deletions
diff --git a/doc/src/sgml/information_schema.sgml b/doc/src/sgml/information_schema.sgml index ad945c2ea9f..4888b647d3c 100644 --- a/doc/src/sgml/information_schema.sgml +++ b/doc/src/sgml/information_schema.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/information_schema.sgml,v 1.43 2009/12/30 22:48:10 petere Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/information_schema.sgml,v 1.44 2009/12/31 14:41:23 petere Exp $ --> <chapter id="information-schema"> <title>The Information Schema</title> @@ -4796,6 +4796,80 @@ ORDER BY c.ordinal_position; </table> </sect1> + <sect1 id="infoschema-triggered-update-columns"> + <title><literal>triggered_update_columns</literal></title> + + <para> + For triggers in the current database that specify a column list + (like <literal>UPDATE OF column1, column2</literal>), the + view <literal>triggered_update_columns</literal> identifies these + columns. Triggers that do not specify a column list are not + included in this view. Only those columns are shown that the + current user owns or has some non-SELECT privilege on. + </para> + + <table> + <title><literal>triggered_update_columns</literal> Columns</title> + + <tgroup cols="3"> + <thead> + <row> + <entry>Name</entry> + <entry>Data Type</entry> + <entry>Description</entry> + </row> + </thead> + + <tbody> + <row> + <entry><literal>trigger_catalog</literal></entry> + <entry><type>sql_identifier</type></entry> + <entry>Name of the database that contains the trigger (always the current database)</entry> + </row> + + <row> + <entry><literal>trigger_schema</literal></entry> + <entry><type>sql_identifier</type></entry> + <entry>Name of the schema that contains the trigger</entry> + </row> + + <row> + <entry><literal>trigger_name</literal></entry> + <entry><type>sql_identifier</type></entry> + <entry>Name of the trigger</entry> + </row> + + <row> + <entry><literal>event_object_catalog</literal></entry> + <entry><type>sql_identifier</type></entry> + <entry> + Name of the database that contains the table that the trigger + is defined on (always the current database) + </entry> + </row> + + <row> + <entry><literal>event_object_schema</literal></entry> + <entry><type>sql_identifier</type></entry> + <entry>Name of the schema that contains the table that the trigger is defined on</entry> + </row> + + <row> + <entry><literal>event_object_table</literal></entry> + <entry><type>sql_identifier</type></entry> + <entry>Name of the table that the trigger is defined on</entry> + </row> + + <row> + <entry><literal>event_object_column</literal></entry> + <entry><type>sql_identifier</type></entry> + <entry>Name of the column that the trigger is defined on</entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + <sect1 id="infoschema-triggers"> <title><literal>triggers</literal></title> diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql index 929535acc5a..41911a91a1c 100644 --- a/src/backend/catalog/information_schema.sql +++ b/src/backend/catalog/information_schema.sql @@ -4,7 +4,7 @@ * * Copyright (c) 2003-2009, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.61 2009/12/30 22:48:10 petere Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.62 2009/12/31 14:41:23 petere Exp $ */ /* @@ -1852,13 +1852,27 @@ GRANT SELECT ON tables TO PUBLIC; CREATE VIEW triggered_update_columns AS SELECT CAST(current_database() AS sql_identifier) AS trigger_catalog, - CAST(null AS sql_identifier) AS trigger_schema, - CAST(null AS sql_identifier) AS trigger_name, + CAST(n.nspname AS sql_identifier) AS trigger_schema, + CAST(t.tgname AS sql_identifier) AS trigger_name, CAST(current_database() AS sql_identifier) AS event_object_catalog, - CAST(null AS sql_identifier) AS event_object_schema, - CAST(null AS sql_identifier) AS event_object_table, - CAST(null AS sql_identifier) AS event_object_column - WHERE false; + CAST(n.nspname AS sql_identifier) AS event_object_schema, + CAST(c.relname AS sql_identifier) AS event_object_table, + CAST(a.attname AS sql_identifier) AS event_object_column + + FROM pg_namespace n, pg_class c, pg_trigger t, + (SELECT tgoid, (ta0.tgat).x AS tgattnum, (ta0.tgat).n AS tgattpos + FROM (SELECT oid AS tgoid, information_schema._pg_expandarray(tgattr) AS tgat FROM pg_trigger) AS ta0) AS ta, + pg_attribute a + + WHERE n.oid = c.relnamespace + AND c.oid = t.tgrelid + AND t.oid = ta.tgoid + AND (a.attrelid, a.attnum) = (t.tgrelid, ta.tgattnum) + AND NOT t.tgisconstraint + AND (NOT pg_is_other_temp_schema(n.oid)) + AND (pg_has_role(c.relowner, 'USAGE') + -- SELECT privilege omitted, per SQL standard + OR has_column_privilege(c.oid, a.attnum, 'INSERT, UPDATE, REFERENCES') ); GRANT SELECT ON triggered_update_columns TO PUBLIC; |