-<!-- $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>
</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>
*
* 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 $
*/
/*
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;