Add information_schema.triggered_update_columns
authorPeter Eisentraut
Thu, 31 Dec 2009 14:41:23 +0000 (14:41 +0000)
committerPeter Eisentraut
Thu, 31 Dec 2009 14:41:23 +0000 (14:41 +0000)
This reflects the recently added support for triggers on columns.

doc/src/sgml/information_schema.sgml
src/backend/catalog/information_schema.sql

index ad945c2ea9f52ad083096500936825399624d9d6..4888b647d3ce4141436646a88bcda04c23857edf 100644 (file)
@@ -1,4 +1,4 @@
-
+
 
 
  The Information Schema
@@ -4796,6 +4796,80 @@ ORDER BY c.ordinal_position;
   
  
 
+  <literal>triggered_update_columns</literal>
+
+  
+   For triggers in the current database that specify a column list
+   (like UPDATE OF column1, column2), the
+   view triggered_update_columns 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.
+  
+
+  
+   <literal>triggered_update_columns</literal> Columns
+
+   
+    
+     
+      Name
+      Data Type
+      Description
+     
+    
+
+    
+     
+      trigger_catalog
+      sql_identifier
+      Name of the database that contains the trigger (always the current database)
+     
+
+     
+      trigger_schema
+      sql_identifier
+      Name of the schema that contains the trigger
+     
+
+     
+      trigger_name
+      sql_identifier
+      Name of the trigger
+     
+
+     
+      event_object_catalog
+      sql_identifier
+      
+       Name of the database that contains the table that the trigger
+       is defined on (always the current database)
+      
+     
+
+     
+      event_object_schema
+      sql_identifier
+      Name of the schema that contains the table that the trigger is defined on
+     
+
+     
+      event_object_table
+      sql_identifier
+      Name of the table that the trigger is defined on
+     
+
+     
+      event_object_column
+      sql_identifier
+      Name of the column that the trigger is defined on
+     
+    
+   
+  
+
  
   <literal>triggers</literal>
 
index 929535acc5a27175a107df7f1655508589ad1e7c..41911a91a1c3f17a1f2028a61b2b136da906f8b9 100644 (file)
@@ -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;