4
4
*
5
5
* Copyright 2003, PostgreSQL Global Development Group
6
6
*
7
- * $Id: information_schema.sql,v 1.12 2003/06/29 15:14:41 petere Exp $
7
+ * $Id: information_schema.sql,v 1.13 2003/10/16 23:46:17 petere Exp $
8
8
*/
9
9
10
10
/*
@@ -747,11 +747,26 @@ GRANT SELECT ON parameters TO PUBLIC;
747
747
* REFERENTIAL_CONSTRAINTS view
748
748
*/
749
749
750
+ CREATE FUNCTION _pg_keyissubset (smallint [],smallint []) RETURNSboolean
751
+ LANGUAGE sql
752
+ IMMUTABLE
753
+ RETURNSNULL ON NULL INPUT
754
+ AS ' select $1[1] is null or ($1[1] = any ($2) and coalesce(_pg_keyissubset($1[2:array_upper($1,1)], $2), true))' ;
755
+
756
+ CREATE FUNCTION _pg_keysequal (smallint [],smallint []) RETURNSboolean
757
+ LANGUAGE sql
758
+ IMMUTABLE
759
+ RETURNSNULL ON NULL INPUT
760
+ AS ' select _pg_keyissubset($1, $2) and _pg_keyissubset($2, $1)' ;
761
+
750
762
CREATE VIEW referential_constraints AS
751
763
SELECT CAST(current_database()AS sql_identifier)AS constraint_catalog,
752
764
CAST(ncon .nspname AS sql_identifier)AS constraint_schema,
753
765
CAST(con .conname AS sql_identifier)AS constraint_name,
754
- CAST(current_database()AS sql_identifier)AS unique_constraint_catalog,
766
+ CAST(
767
+ CASE WHENnpkc .nspname ISNULL THENNULL
768
+ ELSE current_database() END
769
+ AS sql_identifier)AS unique_constraint_catalog,
755
770
CAST(npkc .nspname AS sql_identifier)AS unique_constraint_schema,
756
771
CAST(pkc .conname AS sql_identifier)AS unique_constraint_name,
757
772
@@ -766,30 +781,27 @@ CREATE VIEW referential_constraints AS
766
781
WHEN' n' THEN' SET NULL'
767
782
WHEN' d' THEN' SET DEFAULT'
768
783
WHEN' r' THEN' RESTRICT'
769
- WHEN' a' THEN' NOACTION ' END
784
+ WHEN' a' THEN' NO ACTION ' END
770
785
AS character_data)AS update_rule,
771
786
772
787
CAST(
773
788
CASEcon .confdeltype WHEN' c' THEN' CASCADE'
774
789
WHEN' n' THEN' SET NULL'
775
790
WHEN' d' THEN' SET DEFAULT'
776
791
WHEN' r' THEN' RESTRICT'
777
- WHEN' a' THEN' NOACTION ' END
792
+ WHEN' a' THEN' NO ACTION ' END
778
793
AS character_data)AS delete_rule
779
794
780
- FROM pg_namespace ncon,
781
- pg_constraint con,
782
- pg_class c,
783
- pg_constraint pkc,
784
- pg_namespace npkc,
785
- pg_user u
795
+ FROM ( pg_namespace nconINNER JOIN pg_constraint con ON ncon . oid = con . connamespace
796
+ INNER JOIN pg_class c ON con . conrelid = c . oid
797
+ INNER JOIN pg_user u ON c . relowner = u . usesysid )
798
+ LEFT JOIN
799
+ (pg_constraint pkc INNER JOIN pg_namespace npkcON pkc . connamespace = npkc . oid )
800
+ ON con . confrelid = pkc . conrelid AND _pg_keysequal( con . confkey , pkc . conkey )
786
801
787
- WHERE ncon .oid = con .connamespace
788
- AND con .conrelid = c .oid
789
- AND con .confkey = pkc .conkey
790
- AND pkc .connamespace = npkc .oid
791
- AND c .relowner = u .usesysid
792
- AND c .relkind = ' r'
802
+ WHERE c .relkind = ' r'
803
+ AND con .contype = ' f'
804
+ AND (pkc .contype IN (' p' ,' u' )OR pkc .contype ISNULL )
793
805
AND u .usename = current_user ;
794
806
795
807
GRANT SELECT ON referential_constraints TO PUBLIC;