Table of Contents
information_schema_catalog_nameadministrable_role_authorizationsapplicable_rolesattributescharacter_setscheck_constraint_routine_usagecheck_constraintscollationscollation_character_set_applicabilitycolumn_column_usagecolumn_domain_usagecolumn_optionscolumn_privilegescolumn_udt_usagecolumnsconstraint_column_usageconstraint_table_usagedata_type_privilegesdomain_constraintsdomain_udt_usagedomainselement_typesenabled_rolesforeign_data_wrapper_optionsforeign_data_wrappersforeign_server_optionsforeign_serversforeign_table_optionsforeign_tableskey_column_usageparametersreferential_constraintsrole_column_grantsrole_routine_grantsrole_table_grantsrole_udt_grantsrole_usage_grantsroutine_column_usageroutine_privilegesroutine_routine_usageroutine_sequence_usageroutine_table_usageroutinesschematasequencessql_featuressql_implementation_infosql_partssql_sizingtable_constraintstable_privilegestablestransformstriggered_update_columnstriggersudt_privilegesusage_privilegesuser_defined_typesuser_mapping_optionsuser_mappingsview_column_usageview_routine_usageview_table_usageviews信息模式由一组视图组成,这些视图包含关于在当前数据库中定义的 对象的信息。 信息模式在 SQL 标准中定义,因此可以预期它是可移植且稳定的 — 与系统目录不同,后者是 PostgreSQL 特有的, 并且是仿照实现方面的考量建模的。 不过,信息模式视图并不包含关于 PostgreSQL 特有特性的信息;要查询 这些特性,您需要查询系统目录或其他 PostgreSQL 特有的视图。
当查询数据库以获取约束信息时,一个符合标准、预期只返回一行的 查询有可能返回多行。 这是因为 SQL 标准要求约束名称在模式内唯一, 但 PostgreSQL 不强制这一限制。 PostgreSQL 自动生成的约束名称会避免在同一模式中出现重复, 但用户可以指定这样的重复名称。
在查询
check_constraint_routine_usage、
check_constraints、
domain_constraints 和
referential_constraints 这样的信息模式视图时
可能出现这个问题。
其他一些视图有类似的问题,但包含表名以帮助区分重复行,
例如
constraint_column_usage、
constraint_table_usage、
table_constraints。