information_schema.sql

来自「PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统」· SQL 代码 · 共 1,725 行 · 第 1/5 页

SQL
1,725
字号
/* * 20.18 * COLUMNS view */CREATE VIEW columns AS    SELECT CAST(current_database() AS sql_identifier) AS table_catalog,           CAST(nc.nspname AS sql_identifier) AS table_schema,           CAST(c.relname AS sql_identifier) AS table_name,           CAST(a.attname AS sql_identifier) AS column_name,           CAST(a.attnum AS cardinal_number) AS ordinal_position,           CAST(             CASE WHEN pg_has_role(c.relowner, 'MEMBER') THEN pg_get_expr(ad.adbin, ad.adrelid)                  ELSE null END             AS character_data)             AS column_default,           CAST(CASE WHEN a.attnotnull OR (t.typtype = 'd' AND t.typnotnull) THEN 'NO' ELSE 'YES' END             AS character_data)             AS is_nullable,           CAST(             CASE WHEN t.typtype = 'd' THEN               CASE WHEN bt.typelem <> 0 AND bt.typlen = -1 THEN 'ARRAY'                    WHEN nbt.nspname = 'pg_catalog' THEN format_type(t.typbasetype, null)                    ELSE 'USER-DEFINED' END             ELSE               CASE WHEN t.typelem <> 0 AND t.typlen = -1 THEN 'ARRAY'                    WHEN nt.nspname = 'pg_catalog' THEN format_type(a.atttypid, null)                    ELSE 'USER-DEFINED' END             END             AS character_data)             AS data_type,           CAST(             _pg_char_max_length(_pg_truetypid(a, t), _pg_truetypmod(a, t))             AS cardinal_number)             AS character_maximum_length,           CAST(             _pg_char_octet_length(_pg_truetypid(a, t), _pg_truetypmod(a, t))             AS cardinal_number)             AS character_octet_length,           CAST(             _pg_numeric_precision(_pg_truetypid(a, t), _pg_truetypmod(a, t))             AS cardinal_number)             AS numeric_precision,           CAST(             _pg_numeric_precision_radix(_pg_truetypid(a, t), _pg_truetypmod(a, t))             AS cardinal_number)             AS numeric_precision_radix,           CAST(             _pg_numeric_scale(_pg_truetypid(a, t), _pg_truetypmod(a, t))             AS cardinal_number)             AS numeric_scale,           CAST(             _pg_datetime_precision(_pg_truetypid(a, t), _pg_truetypmod(a, t))             AS cardinal_number)             AS datetime_precision,           CAST(null AS character_data) AS interval_type, -- XXX           CAST(null AS character_data) AS interval_precision, -- XXX           CAST(null AS sql_identifier) AS character_set_catalog,           CAST(null AS sql_identifier) AS character_set_schema,           CAST(null AS sql_identifier) AS character_set_name,           CAST(null AS sql_identifier) AS collation_catalog,           CAST(null AS sql_identifier) AS collation_schema,           CAST(null AS sql_identifier) AS collation_name,           CAST(CASE WHEN t.typtype = 'd' THEN current_database() ELSE null END             AS sql_identifier) AS domain_catalog,           CAST(CASE WHEN t.typtype = 'd' THEN nt.nspname ELSE null END             AS sql_identifier) AS domain_schema,           CAST(CASE WHEN t.typtype = 'd' THEN t.typname ELSE null END             AS sql_identifier) AS domain_name,           CAST(current_database() AS sql_identifier) AS udt_catalog,           CAST(coalesce(nbt.nspname, nt.nspname) AS sql_identifier) AS udt_schema,           CAST(coalesce(bt.typname, t.typname) AS sql_identifier) AS udt_name,           CAST(null AS sql_identifier) AS scope_catalog,           CAST(null AS sql_identifier) AS scope_schema,           CAST(null AS sql_identifier) AS scope_name,           CAST(null AS cardinal_number) AS maximum_cardinality,           CAST(a.attnum AS sql_identifier) AS dtd_identifier,           CAST('NO' AS character_data) AS is_self_referencing    FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum),         pg_class c, pg_namespace nc,         (pg_type t JOIN pg_namespace nt ON (t.typnamespace = nt.oid))           LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON (bt.typnamespace = nbt.oid))           ON (t.typtype = 'd' AND t.typbasetype = bt.oid)    WHERE a.attrelid = c.oid          AND a.atttypid = t.oid          AND nc.oid = c.relnamespace          AND a.attnum > 0 AND NOT a.attisdropped AND c.relkind in ('r', 'v')          AND (pg_has_role(c.relowner, 'MEMBER')               OR has_table_privilege(c.oid, 'SELECT')               OR has_table_privilege(c.oid, 'INSERT')               OR has_table_privilege(c.oid, 'UPDATE')               OR has_table_privilege(c.oid, 'REFERENCES') );GRANT SELECT ON columns TO PUBLIC;/* * 20.19 * CONSTRAINT_COLUMN_USAGE view */CREATE VIEW constraint_column_usage AS    SELECT CAST(current_database() AS sql_identifier) AS table_catalog,           CAST(tblschema AS sql_identifier) AS table_schema,           CAST(tblname AS sql_identifier) AS table_name,           CAST(colname AS sql_identifier) AS column_name,           CAST(current_database() AS sql_identifier) AS constraint_catalog,           CAST(cstrschema AS sql_identifier) AS constraint_schema,           CAST(cstrname AS sql_identifier) AS constraint_name    FROM (        /* check constraints */        SELECT DISTINCT nr.nspname, r.relname, r.relowner, a.attname, nc.nspname, c.conname          FROM pg_namespace nr, pg_class r, pg_attribute a, pg_depend d, pg_namespace nc, pg_constraint c          WHERE nr.oid = r.relnamespace            AND r.oid = a.attrelid            AND d.refclassid = 'pg_catalog.pg_class'::regclass            AND d.refobjid = r.oid            AND d.refobjsubid = a.attnum            AND d.classid = 'pg_catalog.pg_constraint'::regclass            AND d.objid = c.oid            AND c.connamespace = nc.oid            AND c.contype = 'c'            AND r.relkind = 'r'            AND NOT a.attisdropped        UNION ALL        /* unique/primary key/foreign key constraints */        SELECT nr.nspname, r.relname, r.relowner, a.attname, nc.nspname, c.conname          FROM pg_namespace nr, pg_class r, pg_attribute a, pg_namespace nc,               pg_constraint c          WHERE nr.oid = r.relnamespace            AND r.oid = a.attrelid            AND nc.oid = c.connamespace            AND (CASE WHEN c.contype = 'f' THEN r.oid = c.confrelid AND a.attnum = ANY (c.confkey)                      ELSE r.oid = c.conrelid AND a.attnum = ANY (c.conkey) END)            AND NOT a.attisdropped            AND c.contype IN ('p', 'u', 'f')            AND r.relkind = 'r'      ) AS x (tblschema, tblname, tblowner, colname, cstrschema, cstrname)    WHERE pg_has_role(x.tblowner, 'MEMBER');GRANT SELECT ON constraint_column_usage TO PUBLIC;/* * 20.20 * CONSTRAINT_TABLE_USAGE view */CREATE VIEW constraint_table_usage AS    SELECT CAST(current_database() AS sql_identifier) AS table_catalog,           CAST(nr.nspname AS sql_identifier) AS table_schema,           CAST(r.relname AS sql_identifier) AS table_name,           CAST(current_database() AS sql_identifier) AS constraint_catalog,           CAST(nc.nspname AS sql_identifier) AS constraint_schema,           CAST(c.conname AS sql_identifier) AS constraint_name    FROM pg_constraint c, pg_namespace nc,         pg_class r, pg_namespace nr    WHERE c.connamespace = nc.oid AND r.relnamespace = nr.oid          AND ( (c.contype = 'f' AND c.confrelid = r.oid)             OR (c.contype IN ('p', 'u') AND c.conrelid = r.oid) )          AND r.relkind = 'r'          AND pg_has_role(r.relowner, 'MEMBER');GRANT SELECT ON constraint_table_usage TO PUBLIC;-- 20.21 DATA_TYPE_PRIVILEGES view appears later./* * 20.24 * DOMAIN_CONSTRAINTS view */CREATE VIEW domain_constraints AS    SELECT CAST(current_database() AS sql_identifier) AS constraint_catalog,           CAST(rs.nspname AS sql_identifier) AS constraint_schema,           CAST(con.conname AS sql_identifier) AS constraint_name,           CAST(current_database() AS sql_identifier) AS domain_catalog,           CAST(n.nspname AS sql_identifier) AS domain_schema,           CAST(t.typname AS sql_identifier) AS domain_name,           CAST(CASE WHEN condeferrable THEN 'YES' ELSE 'NO' END             AS character_data) AS is_deferrable,           CAST(CASE WHEN condeferred THEN 'YES' ELSE 'NO' END             AS character_data) AS initially_deferred    FROM pg_namespace rs, pg_namespace n, pg_constraint con, pg_type t    WHERE rs.oid = con.connamespace          AND n.oid = t.typnamespace          AND t.oid = con.contypid          AND pg_has_role(t.typowner, 'MEMBER');GRANT SELECT ON domain_constraints TO PUBLIC;/* * 20.25 * DOMAIN_UDT_USAGE view */CREATE VIEW domain_udt_usage AS    SELECT CAST(current_database() AS sql_identifier) AS udt_catalog,           CAST(nbt.nspname AS sql_identifier) AS udt_schema,           CAST(bt.typname AS sql_identifier) AS udt_name,           CAST(current_database() AS sql_identifier) AS domain_catalog,           CAST(nt.nspname AS sql_identifier) AS domain_schema,           CAST(t.typname AS sql_identifier) AS domain_name    FROM pg_type t, pg_namespace nt,         pg_type bt, pg_namespace nbt    WHERE t.typnamespace = nt.oid          AND t.typbasetype = bt.oid          AND bt.typnamespace = nbt.oid          AND t.typtype = 'd'          AND pg_has_role(bt.typowner, 'MEMBER');GRANT SELECT ON domain_udt_usage TO PUBLIC;/* * 20.26 * DOMAINS view */CREATE VIEW domains AS    SELECT CAST(current_database() AS sql_identifier) AS domain_catalog,           CAST(nt.nspname AS sql_identifier) AS domain_schema,           CAST(t.typname AS sql_identifier) AS domain_name,           CAST(             CASE WHEN t.typelem <> 0 AND t.typlen = -1 THEN 'ARRAY'                  WHEN nbt.nspname = 'pg_catalog' THEN format_type(t.typbasetype, null)                  ELSE 'USER-DEFINED' END             AS character_data)             AS data_type,           CAST(             _pg_char_max_length(t.typbasetype, t.typtypmod)             AS cardinal_number)             AS character_maximum_length,           CAST(             _pg_char_octet_length(t.typbasetype, t.typtypmod)             AS cardinal_number)             AS character_octet_length,           CAST(null AS sql_identifier) AS character_set_catalog,           CAST(null AS sql_identifier) AS character_set_schema,           CAST(null AS sql_identifier) AS character_set_name,           CAST(null AS sql_identifier) AS collation_catalog,           CAST(null AS sql_identifier) AS collation_schema,           CAST(null AS sql_identifier) AS collation_name,           CAST(             _pg_numeric_precision(t.typbasetype, t.typtypmod)             AS cardinal_number)             AS numeric_precision,           CAST(             _pg_numeric_precision_radix(t.typbasetype, t.typtypmod)             AS cardinal_number)             AS numeric_precision_radix,           CAST(             _pg_numeric_scale(t.typbasetype, t.typtypmod)             AS cardinal_number)             AS numeric_scale,           CAST(             _pg_datetime_precision(t.typbasetype, t.typtypmod)             AS cardinal_number)             AS datetime_precision,           CAST(null AS character_data) AS interval_type, -- XXX           CAST(null AS character_data) AS interval_precision, -- XXX           CAST(t.typdefault AS character_data) AS domain_default,           CAST(current_database() AS sql_identifier) AS udt_catalog,           CAST(nbt.nspname AS sql_identifier) AS udt_schema,           CAST(bt.typname AS sql_identifier) AS udt_name,           CAST(null AS sql_identifier) AS scope_catalog,           CAST(null AS sql_identifier) AS scope_schema,           CAST(null AS sql_identifier) AS scope_name,           CAST(null AS cardinal_number) AS maximum_cardinality,           CAST(1 AS sql_identifier) AS dtd_identifier    FROM pg_type t, pg_namespace nt,         pg_type bt, pg_namespace nbt    WHERE t.typnamespace = nt.oid          AND t.typbasetype = bt.oid          AND bt.typnamespace = nbt.oid          AND t.typtype = 'd';GRANT SELECT ON domains TO PUBLIC;-- 20.27 ELEMENT_TYPES view appears later./* * 20.28 * ENABLED_ROLES view */CREATE VIEW enabled_roles AS    SELECT CAST(a.rolname AS sql_identifier) AS role_name    FROM pg_authid a    WHERE pg_has_role(a.oid, 'MEMBER');GRANT SELECT ON enabled_roles TO PUBLIC;/*

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?