Make the columns is_insertable_into and is_updatable behave uniformly
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 14 Jan 2009 21:12:09 +0000 (21:12 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 14 Jan 2009 21:12:09 +0000 (21:12 +0000)
correctly.  They are supposed to examine which kinds of rules are present,
which they did in some of the info schema views but not in others.

src/backend/catalog/information_schema.sql

index c2eb4a0b4f77f11bb2d62645cde4ad752f55481a..f905ab5354458a423c8d201d708a1386d3808683 100644 (file)
@@ -655,6 +655,9 @@ CREATE VIEW columns AS
            CAST(null AS character_data) AS generation_expression,
 
            CAST(CASE WHEN c.relkind = 'r'
+                          OR (c.relkind = 'v'
+                              AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '2' AND is_instead)
+                              AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '4' AND is_instead))
                 THEN 'YES' ELSE 'NO' END AS character_data) AS is_updatable
 
     FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum),
@@ -1882,7 +1885,10 @@ CREATE VIEW tables AS
            CAST(null AS sql_identifier) AS user_defined_type_name,
 
            CAST(CASE WHEN c.relkind = 'r'
+                          OR (c.relkind = 'v'
+                              AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '3' AND is_instead))
                 THEN 'YES' ELSE 'NO' END AS character_data) AS is_insertable_into,
+
            CAST('NO' AS character_data) AS is_typed,
            CAST(
              CASE WHEN nc.oid = pg_my_temp_schema() THEN 'PRESERVE' -- FIXME