mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Add information_schema.triggered_update_columns
This reflects the recently added support for triggers on columns.
This commit is contained in:
parent
31cf893088
commit
c584d11bb3
@ -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>
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user