信息模式由一组视图构成,它们包含定义在当前数据库中对象的信息。信息模式以 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
。
一、模式
信息模式本身是一个名为information_schema
的模式。这个模式自动存在于所有数据库中。这个模式的拥有者是集簇中的初始数据库用户,并且该用户自然地拥有这个模式上的所有特权,包括删除它的能力(但是这样节省的空间是很小的)。
默认情况下,信息模式不在模式搜索路径中,因此你需要使用限定名访问其中的所有对象。因为信息模式中的某些对象的名称是可能出现在用户应用中的一般名称,如果你想把该信息模式放在路径中,你应该小心。
二、数据类型
信息模式视图的列使用定义在信息模式中的特殊数据类型。它们被定义为普通内建类型之上的简单域。你不应在信息模式之外使用这些类型进行工作,但是如果你的应用从信息模式中进行选择,那你的应用就必须准备好面对它们。
这些类型是:
cardinal_number
一种非负整数。
character_data
一种字符串(没有指定最大长度)。
sql_identifier
一种字符串。这种类型被用于 SQL 标识符,类型character_data
被用于任何其他类型的文本数据。
time_stamp
在类型timestamp with time zone
之上的一个域。
yes_or_no
一种字符串域,它包含YES
或NO
。这被用来在信息模式中表示布尔(真/假)(信息模式是在类型boolean
被加到 SQL 标准之前被发明的,因此这个惯例是用来使信息模式向后兼容)。
信息模式中的每一列都是这五种类型之一。
三、information_schema_catalog_name
information_schema_catalog_name
是一个表,它总是包含一行和一列,其中包含了当前数据库(SQL 术语中的当前目录)的名字。
表 3.1. information_schema_catalog_name
列
名称 | 数据类型 | 描述 |
---|---|---|
catalog_name | sql_identifier | 包含这个信息模式的数据库名 |
四、administrable_role_authorizations
视图administrable_role_authorizations
标识当前用户对其有管理选项的所有角色。
表 3.2. administrable_role_authorizations
列
名称 | 数据类型 | 描述 |
---|---|---|
grantee | sql_identifier | 被授予这个角色的成员关系的角色名(可以是当前用户,或者在嵌套角色成员关系情况下的一个不同角色) |
role_name | sql_identifier | 角色名 |
is_grantable | yes_or_no | 总是 YES |
五、applicable_roles
视图applicable_roles
当前用户可以使用其特权的所有角色。这意味着有某种角色授权链从当前用户到讨论中的角色。当前用户本身也是一个可应用的角色。可应用的角色的集合通常被用于权限检查。
表 3.3. applicable_roles
列
名称 | 数据类型 | 描述 |
---|---|---|
grantee | sql_identifier | 被授予这个角色的成员关系的角色名(可以是当前用户,或者在嵌套角色成员关系情况下的一个不同角色) |
role_name | sql_identifier | 一个角色的名字 |
is_grantable | yes_or_no | YES 表示被授予者在该角色上有管理选项,NO 表示没有管理选项 |
六、attributes
视图attributes
包含数据库中定义的组合数据类型的属性的有关信息(注意该视图并不给出有关表列的信息,表列有时候在 PostgreSQL 上下文环境中也被称为属性)。只有当前用户能够访问(由于是拥有者获得的权限或是在类型上有某些特权)的那些属性会被显示。
表 3.4. attributes
列
名称 | 数据类型 | 描述 |
---|---|---|
udt_catalog | sql_identifier | 包含该数据类型的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 包含该数据类型的模式名 |
udt_name | sql_identifier | 数据类型名 |
attribute_name | sql_identifier | 属性名 |
ordinal_position | cardinal_number | 属性在该数据类型内部的顺序位置(从 1 开始计算) |
attribute_default | character_data | 该属性的默认表达式 |
is_nullable | yes_or_no | 如果该属性是可能为空的,值为YES ,否则为NO |
data_type | character_data | 如果该属性是一个内建类型,此列值为该属性的数据类型;如果该属性是某种数组,此列值为ARRAY (在这种情况下,见视图element_types );其他情况,此列值为USER-DEFINED (在这种情况下,该类型在attribute_udt_name 和相关列中标识)。 |
character_maximum_length | cardinal_number | 如果data_type 标识一个字符或位串类型,这里是声明的最大长度;如果没有声明最大长度,则对于所有其他数据类型为空。 |
character_octet_length | cardinal_number | 如果data_type 标识一个字符类型,这里是一个数据的最大可能长度(以字节计);对其他所有数据类型为空。最大字节长度取决于声明的字符最大长度(见上文)和服务器编码。 |
character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_catalog | sql_identifier | 包含此属性排序规则的数据库名(总是当前数据库),如果默认或者该属性的数据类型不可排序则为空 |
collation_schema | sql_identifier | 包含此属性排序规则的模式名,如果默认或者该属性的数据类型不可排序则为空 |
collation_name | sql_identifier | 该属性排序规则的名称,如果默认或者该属性的数据类型不可排序则为空 |
numeric_precision | cardinal_number | 如果data_type 标识一种数字类型,这列包含这个属性类型的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。 |
numeric_precision_radix | cardinal_number | 如果data_type 标识一种数字类型,这一列指示numeric_precision 和numeric_scale 列中的值是基于什么来表示。该值为 2 或 10。对于所有其他数据类型,这一列为空。 |
numeric_scale | cardinal_number | 如果data_type 标识一种准确数字类型,这列包含这个属性类型的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。 |
datetime_precision | cardinal_number | 如果data_type 标识一种日期、时间、时间戳或时间间隔类型,这一列包含这个属性类型的(声明的或隐式的)分数秒的精度,也就是秒值的小数点后的十进制位数。对于所有其他数据类型,这一列为空。 |
interval_type | character_data | 如果data_type 标识一种时间间隔类型,这一列包含时间间隔为这个属性包括哪些域的声明,例如YEAR TO MONTH 、DAY TO SECOND 等等。如果没有指定域限制(也就是该时间间隔接受所有域),并且对于所有其他数据类型,这个域为空。 |
interval_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性(关于时间间隔类型属性的分数秒精度可见datetime_precision ) |
attribute_udt_catalog | sql_identifier | 属性数据类型被定义的数据库名(总是当前数据库) |
attribute_udt_schema | sql_identifier | 属性数据类型被定义的模式名 |
attribute_udt_name | sql_identifier | 属性数据类型的名称 |
scope_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
maximum_cardinality | cardinal_number | 总是空,因为数组在PostgreSQL中总是有无限制的最大势 |
dtd_identifier | sql_identifier | 该列的数据类型描述符的一个标识符,在从属于该表的数据类型标识符之中唯一。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。 |
is_derived_reference_attribute | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
关于某些列的详情,参见第十六节之下的一个相似结构的视图。
七、character_sets
视图character_sets
标识当前数据库中可用的字符集。因为 PostgreSQL 不支持在同一个数据库中有多个字符集,这个视图只显示一个字符集,它就是数据库编码。
注意下列术语在 SQL 标准中是怎样使用的:
字元集(character repertoire)
字符的一个抽象集合,例如UNICODE
、UCS
或LATIN1
。它不作为一个 SQL 对象显示,但是在这个视图中可见。
字符编码形式(character encoding form)
某种字元集的一种编码。大部分较老的字元集只使用一种编码形式,并且因此它们没有独立的名字(例如LATIN1
就是一种适用于LATIN1
字元集的编码形式)。但是 Unicode 就有几种编码形式如UTF8
、UTF16
等等(并非全部被 PostgreSQL 支持)。编码形式不作为一个 SQL 对象显示,但是在这个视图中可见。
字符集(character set)
一个标识一种字元集、一种字符编码以及一种默认排序规则的命名 SQL 对象。一个预定义的字符集通常具有和一种编码形式相同的名字,但是用户可以定义其他名字。例如,字符集UTF8
通常标识字元集UCS
、编码形式UTF8
以及某种默认排序规则。
你可以把 PostgreSQL 中的一种“编码”想成一个字符集或是一种字符编码形式。它们将具有相同的名字,并且在一个数据库中只能用其中一个。
表 3.5. character_sets
列
名称 | 数据类型 | 描述 |
---|---|---|
character_set_catalog | sql_identifier | 当前字符集并未被实现为模式对象,因此这一列为空。 |
character_set_schema | sql_identifier | 当前字符集并未被实现为模式对象,因此这一列为空。 |
character_set_name | sql_identifier | 该字符集的名字,当前实现为显示该数据库编码的名字 |
character_repertoire | sql_identifier | 字元集,如果编码为UTF8 则显示UCS ,否则只显示编码名称 |
form_of_use | sql_identifier | 字符编码形式,与数据库编码相同 |
default_collate_catalog | sql_identifier | 包含该默认排序规则的数据库名(如果任意排序规则被标识,总是当前数据库) |
default_collate_schema | sql_identifier | 包含该默认排序规则的模式名 |
default_collate_name | sql_identifier | 默认排序规则的名字。该默认排序规则被标识为匹配当前数据库的COLLATE 和CTYPE 设置的排序规则。如果没有那种排序规则,那么这一列和相关模式以及目录列为空。 |
八、check_constraint_routine_usage
视图check_constraint_routine_usage
标识被检查约束琐事使用的例程(函数和过程)。只有被一个当前启用的角色所拥有的例程才被显示。
表 3.6. check_constraint_routine_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
specific_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
specific_schema | sql_identifier | 包含该函数的模式名 |
specific_name | sql_identifier | 该函数的“指定名称”。详见第四十节。 |
九、check_constraints
视图check_constraints
包含所有检查约束,不管是定义在一个表上的还是定义在一个域上的,它们被一个当前启用的角色所拥有(表或域的拥有者就是约束的拥有者)。
表 3.7. check_constraints
列
名称 | 数据类型 | 描述 |
---|---|---|
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
check_clause | character_data | 该检查约束的检查表达式 |
十、collations
视图collations
包含在当前数据库中可用的排序规则。
表 3.8. collations
列
名称 | 数据类型 | 描述 |
---|---|---|
collation_catalog | sql_identifier | 包含该排序规则的数据库名(总是当前数据库) |
collation_schema | sql_identifier | 包含该排序规则的模式名 |
collation_name | sql_identifier | 默认排序规则的名称 |
pad_attribute | character_data | 总是NO PAD (另一种选择PAD SPACE 没有被 PostgreSQL 支持) |
十一、collation_character_set_applicability
视图collation_character_set_applicability
标识可用的排序规则适用于哪些字符集。在 PostgreSQL 中,每个数据库中只有一种字符集(解释见第七节),因此这个视图没有提供很有用的信息。
表 3.9. collation_character_set_applicability
列
名称 | 数据类型 | 描述 |
---|---|---|
collation_catalog | sql_identifier | 包含该排序规则的数据库名(总是当前数据库) |
collation_schema | sql_identifier | 包含该排序规则的模式名 |
collation_name | sql_identifier | 默认排序规则的名称 |
character_set_catalog | sql_identifier | 当前字符集还未被实现为模式对象,所以这一列为空 |
character_set_schema | sql_identifier | 当前字符集还未被实现为模式对象,所以这一列为空 |
character_set_name | sql_identifier | 字符集名称 |
十二、column_domain_usage
视图column_domain_usage
标识所有使用定义在当前数据库中并且被一个当前启用的角色拥有的域的列(表列或视图列)。
表 3.10. column_domain_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
domain_catalog | sql_identifier | 包含该域的数据库名(总是当前数据库) |
domain_schema | sql_identifier | 包含该域的模式名 |
domain_name | sql_identifier | 域名称 |
table_catalog | sql_identifier | 包含该表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该表的模式名 |
table_name | sql_identifier | 表名称 |
column_name | sql_identifier | 列名称 |
十三、column_options
视图column_options
包含为当前数据库中外部表列定义的所有选项。只有当前用户能够访问(作为拥有者或具有某些特权)的那些外部表列才被显示。
表 3.11. column_options
列
名称 | 数据类型 | 描述 |
---|---|---|
table_catalog | sql_identifier | 包含该外部表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该外部表的模式名 |
table_name | sql_identifier | 外部表名 |
column_name | sql_identifier | 列名称 |
option_name | sql_identifier | 一个选项名 |
option_value | character_data | 该选项的值 |
十四、column_privileges
视图column_privileges
标识所有授予给一个当前启用的角色或者被一个当前启用的角色授予的特权。对每一个列、授予者、被授予者的组合只有一行。
如果一个特权被授予在一整个表上,它在这个视图中被显示为在每一列上授予,但是只有可用于列粒度的特权类型才会这样: SELECT
、INSERT
、 UPDATE
、REFERENCES
。
表 3.12. column_privileges
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
table_catalog | sql_identifier | 包含该列的表所在的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该列的表所在的模式名 |
table_name | sql_identifier | 包含该列的表名 |
column_name | sql_identifier | 列名称 |
privilege_type | character_data | 特权类型:SELECT 、 INSERT 、UPDATE 或 REFERENCES |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
十五、column_udt_usage
视图column_udt_usage
标识所有使用被一个当前启用的角色拥有的数据类型的列。注意在PostgreSQL中,内建数据类型的行为和用户定义的类型相似,因此它们也被包括在这里。详见第十六节。
表 3.13. column_udt_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
udt_catalog | sql_identifier | 该列数据类型(如果适用,底层的域类型)被定义的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 该列数据类型(如果适用,底层的域类型)被定义的模式名 |
udt_name | sql_identifier | 该列数据类型(如果适用,底层的域类型)的名称 |
table_catalog | sql_identifier | 包含该表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该表的模式名 |
table_name | sql_identifier | 表名称 |
column_name | sql_identifier | 列名称 |
十六、columns
视图columns
包含数据库中有关所有表列(或视图列)的信息。系统列(oid
等)不被包括在内。只有那些当前用户能够访问(作为拥有者或具有某些特权)的列才被显示。
表 3.14. columns
列
名称 | 数据类型 | 描述 |
---|---|---|
table_catalog | sql_identifier | 包含该表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该表的模式名 |
table_name | sql_identifier | 表名称 |
column_name | sql_identifier | 列名称 |
ordinal_position | cardinal_number | 该列在表内的顺序位置(从 1 开始计) |
column_default | character_data | 该列的默认表达式 |
is_nullable | yes_or_no | 如果该列可以为空,则为YES ,否则为NO 。一个非空约束是让一列成为不能为空的方法,但还有其他方法。 |
data_type | character_data | 如果该列的数据类型是一种内建类型,则为该列的数据类型;如果是某种数组(此种情况见视图element_types ),则为ARRAY ;否则为USER-DEFINED (此种情况下该类型被标识在udt_name 和相关列中)。如果该列基于一个域,这一列引用该域底层的类型(该列被标识在domain_name 和相关列中)。 |
character_maximum_length | cardinal_number | 如果data_type 标识一种字符或位串类型,这里是声明的最大长度;如果没有声明最大长度或者所有其他数据类型,这里为空。 |
character_octet_length | cardinal_number | 如果data_type 标识一个字符类型,这里是一个数据的最大可能长度(以字节计);对其他所有数据类型为空。最大字节长度取决于声明的字符最大长度(见上文)和服务器编码。 |
numeric_precision | cardinal_number | 如果data_type 标识一种数字类型,这列包含这个属性类型的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。 |
numeric_precision_radix | cardinal_number | 如果data_type 标识一种数字类型,这一列指示numeric_precision 和numeric_scale 列中的值是基于什么来表示。该值为 2 或 10。对于所有其他数据类型,这一列为空。 |
numeric_scale | cardinal_number | 如果data_type 标识一种准确数字类型,这列包含这个属性类型的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。 |
datetime_precision | cardinal_number | 如果data_type 标识一种日期、时间、时间戳或时间间隔类型,这一列包含这个属性类型的(声明的或隐式的)分数秒的精度,也就是秒值的小数点后的十进制位数。对于所有其他数据类型,这一列为空。 |
interval_type | character_data | 如果data_type 标识一种时间间隔类型,这一列包含时间间隔为这个属性包括哪些域的声明,例如YEAR TO MONTH 、DAY TO SECOND 等等。如果没有指定域限制(也就是该时间间隔接受所有域),并且对于所有其他数据类型,这个域为空。 |
interval_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性(关于时间间隔类型属性的分数秒精度可见datetime_precision ) |
character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_catalog | sql_identifier | 包含此属性排序规则的数据库名(总是当前数据库),如果默认或者该属性的数据类型不可排序则为空 |
collation_schema | sql_identifier | 包含此属性排序规则的模式名,如果默认或者该属性的数据类型不可排序则为空 |
collation_name | sql_identifier | 该属性排序规则的名称,如果默认或者该属性的数据类型不可排序则为空 |
domain_catalog | sql_identifier | 如果该列有一个域类型,这里是该域所在的数据库名(总是当前数据库),否则为空。 |
domain_schema | sql_identifier | 如果该列有一个域类型,这里是该域所在的模式名,否则为空。 |
domain_name | sql_identifier | 如果该列有一个域类型,这里是该域的名称,否则为空。 |
udt_catalog | sql_identifier | 该列数据类型(如果适用,底层的域类型)被定义的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 该列数据类型(如果适用,底层的域类型)被定义的模式名 |
udt_name | sql_identifier | 该列数据类型(如果适用,底层的域类型)的名称 |
scope_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
maximum_cardinality | cardinal_number | 总是空,因为数组在PostgreSQL中总是有无限制的最大势 |
dtd_identifier | sql_identifier | 该列的数据类型描述符的一个标识符,在从属于该表的数据类型标识符之中唯一。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。 |
is_self_referencing | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
is_identity | yes_or_no | 如果该列是一个标识列,则为YES ,否则为NO 。 |
identity_generation | character_data | 如果该列是一个标识列,则为ALWAYS 或者BY DEFAULT ,它反映该列的定义。 |
identity_start | character_data | 如果该列是一个标识列,则是内部序列的起始值,否则为空。 |
identity_increment | character_data | 如果该列是一个标识列,则是内部序列的增量,否则为空。 |
identity_maximum | character_data | 如果该列是一个标识列,则是内部序列的最大值,否则为空。 |
identity_minimum | character_data | 如果该列是一个标识列,则是内部序列的最小值,否则为空。 |
identity_cycle | yes_or_no | 如果该列是一个标识列,则YES 和NO 分别表示内部序列可循环和不可循环,否则为空。 |
is_generated | character_data | 应用于一个PostgreSQL中不可用的特性 |
generation_expression | character_data | 应用于一个PostgreSQL中不可用的特性 |
is_updatable | yes_or_no | 如果该列是可更新的,则为YES ,否则为NO (基表中的列总是可更新的,视图中的列则不一定) |
因为在 SQL 中有多种方式定义数据类型,而PostgreSQL还包含额外的方式来定义数据类型,它们在信息模式中的表示可能有点困难。列data_type
应该标识列的底层内建类型。在PostgreSQL中,这表示定义在系统目录模式pg_catalog
中的类型。如果应用能够特别地(例如以不同方式格式化数字类型或使用精度列中的数据)处理总所周知的内建类型,这列可能会有用。列udt_name
、udt_schema
和udt_catalog
总是标识列的底层数据类型,即使该列是基于一个域的(因为PostgreSQL对待内建类型和用户定义类型的方式是一样的,内建类型也出现在这里。这是 SQL 标准的一种扩展)。如果一个应用想要根据该类型以不同的方式处理数据,就应该使用这些列,因为在那种情况下即使该列真地基于一个域也没有关系。如果该列是基于一个域,该域的标识被存储在列domain_name
、domain_schema
和domain_catalog
。如果你想要把列和它们相关的数据类型配对并且把域视作单独的类型,你可以写coalesce(domain_name, udt_name)
等等。
十七、constraint_column_usage
视图constraint_column_usage
标识在当前数据库中被某个约束使用的所有列。只有包含在被一个当前启用的角色拥有的表中的那些列才被显示。对于一个检查约束,这个视图标识被用在该检查约束中的列。对于一个外键约束,这个视图标识外键引用的列。对于一个唯一或主键约束,这个视图标识被约束的列。
表 3.15. constraint_column_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
table_catalog | sql_identifier | 包含被某个约束使用的列的表所在的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含被某个约束使用的列的表所在的模式名 |
table_name | sql_identifier | 包含被某个约束使用的列的表名 |
column_name | sql_identifier | 包含被某个约束使用的列名 |
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
十八、constraint_table_usage
视图constraint_table_usage
标识在当前数据库中被某个约束使用的所有表(这与视图table_constraints
不同,它标识哪些表约束定义在哪些表上)。对于一个外键约束,这个视图标识该外键引用的表。对于一个唯一或主键约束,这个视图仅标识该约束属于的表。检查约束和非空约束不被包括在这个视图中。
表 3.16. constraint_table_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
table_catalog | sql_identifier | 包含被某个约束使用的表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含被某个约束使用的表的模式名 |
table_name | sql_identifier | 包含被某个约束使用的表名 |
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
十九、data_type_privileges
视图data_type_privileges
标识当前用户能够访问(作为被描述对象的拥有者或者具有其上的某种特权)的所有数据类型描述符。只要一个数据类型被用在一个表列、一个域或一个函数(作为参数或返回类型)就会生成一个数据类型描述符并且在那个实例中存储一些有关该数据类型如何被使用的信息(例如,声明的最大长度,如果适用)。每一个数据类型描述符被赋予一个任意的标识符,它在被赋予给一个对象(表、域、函数)的数据类型描述符中唯一。这个视图对于应用可能没什么用,但是它被用于定义信息模式中的一些其他视图。
表 3.17. data_type_privileges
列
名称 | 数据类型 | 描述 |
---|---|---|
object_catalog | sql_identifier | 包含该被描述对象的数据库名(总是当前数据库) |
object_schema | sql_identifier | 包含该被描述对象的模式名 |
object_name | sql_identifier | 该描述对象的名字 |
object_type | character_data | 被描述对象的类型:TABLE (从属于表的一列的数据类型描述符)、DOMAIN (从属于域的数据类型描述符)、ROUTINE (从属于函数的一个参数或返回数据类型的数据类型描述符)。 |
dtd_identifier | sql_identifier | 数据类型描述符的标识符,它在同一对象的数据类型描述符之间唯一。 |
二十、domain_constraints
视图domain_constraints
包含所有属于当前数据库中定义的域的约束。只有当前用户能访问的那些域才被显示(作为拥有者或具有某些特权)。
表 3.18. domain_constraints
列
名称 | 数据类型 | 描述 |
---|---|---|
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
domain_catalog | sql_identifier | 包含该域的数据库名(总是当前数据库) |
domain_schema | sql_identifier | 包含该域的模式名 |
domain_name | sql_identifier | 该域的名称 |
is_deferrable | yes_or_no | 如果该约束是可延迟的,则为YES ,否则为NO |
initially_deferred | yes_or_no | 如果该约束是可延迟的且初始就被延迟,则为YES ,否则为NO |
二十一、domain_udt_usage
视图domain_udt_usage
标识所有基于被一个当前启用的角色拥有的数据类型的域。注意在PostgreSQL中,内建数据类型的行为相似于用户定义的类型,因此它们也被包括在这里。
表 3.19. domain_udt_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
udt_catalog | sql_identifier | 该域数据类型被定义的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 该域数据类型被定义的模式名 |
udt_name | sql_identifier | 该域数据类型的名称 |
domain_catalog | sql_identifier | 包含该域的数据库名(总是当前数据库) |
domain_schema | sql_identifier | 包含该域的模式名 |
domain_name | sql_identifier | 该域的名称 |
二十二、domains
视图domains
包含定义在当前数据库中的所有域。只有当前用户能够访问(作为拥有者或具有某些特权)的域才被显示。
表 37.20. domains
列
名称 | 数据类型 | 描述 |
---|---|---|
domain_catalog | sql_identifier | 包含该域的数据库名(总是当前数据库) |
domain_schema | sql_identifier | 包含该域的模式名 |
domain_name | sql_identifier | 该域的名称 |
data_type | character_data | 该域的数据类型如果是一种内建类型,这里是该域的数据类型;如果是某种数组(此种情况见视图element_types ),则为ARRAY ;否则为USER-DEFINED (此种情况中,该类型被标识在udt_name 和相关列中)。 |
character_maximum_length | cardinal_number | 如果该域有一个字符或位串类型,这里是声明的最大长度;如果没有声明最大长度,则对于所有其他数据类型为空。 |
character_octet_length | cardinal_number | 如果该域有一个字符类型,这里是一个数据的最大可能长度(以字节计);对其他所有数据类型为空。最大字节长度取决于声明的字符最大长度(见上文)和服务器编码。 |
character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_catalog | sql_identifier | 包含此域排序规则的数据库名(总是当前数据库),如果默认或者该域的数据类型不可排序则为空 |
collation_schema | sql_identifier | 包含此域排序规则的模式名,如果默认或者该域的数据类型不可排序则为空 |
collation_name | sql_identifier | 该域排序规则的名称,如果默认或者该域的数据类型不可排序则为空 |
numeric_precision | cardinal_number | 如果该域有一种数字类型,这列包含这个域类型的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。 |
numeric_precision_radix | cardinal_number | 如果该域有一种数字类型,这一列指示numeric_precision 和numeric_scale 列中的值是基于什么来表示。该值为 2 或 10。对于所有其他数据类型,这一列为空。 |
numeric_scale | cardinal_number | 如果该域有一种准确数字类型,这列包含这个域类型的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。 |
datetime_precision | cardinal_number | 如果data_type 标识一种日期、时间、时间戳或时间间隔类型,这一列包含这个域类型的(声明的或隐式的)分数秒的精度,也就是秒值的小数点后的十进制位数。对于所有其他数据类型,这一列为空。 |
interval_type | character_data | 如果data_type 标识一种时间间隔类型,这一列包含时间间隔为这个域包括哪些域的声明,例如YEAR TO MONTH 、DAY TO SECOND 等等。如果没有指定域限制(也就是该时间间隔接受所有域),并且对于所有其他数据类型,这个域为空。 |
interval_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性(关于时间间隔类型域的分数秒精度可见datetime_precision ) |
domain_default | character_data | 该域的默认表达式 |
udt_catalog | sql_identifier | 该域数据类型被定义的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 该域数据类型被定义的模式名 |
udt_name | sql_identifier | 该域数据类型的名称 |
scope_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
maximum_cardinality | cardinal_number | 总是空,因为数组在PostgreSQL中总是有无限制的最大势 |
dtd_identifier | sql_identifier | 该域的数据类型描述符的一个标识符,在从属于该域的数据类型标识符之中唯一(这不重要,因为一个域只包含一个数据类型描述符)。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。 |
二十三、element_types
视图element_types
包含数组元素的数据类型描述符。当一个表列、组合类型属性、域、函数参数或函数返回值被定义为一种数组类型,相应的信息模式视图只在列data_type
中包含ARRAY
。要获得该数组元素类型的信息,你可以连接该相应的视图和这个视图。例如,要显示一个表的列及其数据类型和数组元素类型,你可以:
SELECT c.column_name, c.data_type, e.data_type AS element_type
FROM information_schema.columns c LEFT JOIN information_schema.element_types eON ((c.table_catalog, c.table_schema, c.table_name, 'TABLE', c.dtd_identifier)= (e.object_catalog, e.object_schema, e.object_name, e.object_type, e.collection_type_identifier))
WHERE c.table_schema = '...' AND c.table_name = '...'
ORDER BY c.ordinal_position;
这个视图只包括当前用户能够访问(作为拥有者或具有某些特权)的对象。
表 37.21. element_types
列
名称 | 数据类型 | 描述 |
---|---|---|
object_catalog | sql_identifier | 包含使用被描述的数组的对象的数据库名(总是当前数据库) |
object_schema | sql_identifier | 包含使用被描述的数组的对象的模式名 |
object_name | sql_identifier | 使用被描述的模式的对象名 |
object_type | character_data | 使用被描述的数组的对象的类型:TABLE (被一个表列使用的数组)、USER-DEFINED TYPE (被组合类型的一个属性使用的数组)、DOMAIN (被域使用的数组)、ROUTINE (被函数的一个参数或返回数据类型使用的数组)。 |
collection_type_identifier | sql_identifier | 被描述的数组的数据类型描述符的标识符。使用这个去与其他信息模式视图的dtd_identifier 列连接。 |
data_type | character_data | 如果数组元素的数据类型是内建类型,这里是数组元素的数据类型,否则为USER-DEFINED (在那种情况下,该类型被标识在udt_name 和相关列中)。 |
character_maximum_length | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
character_octet_length | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_catalog | sql_identifier | 包含元素类型排序规则的数据库名(总是当前数据库), 如果默认或该元素的数据类型是不可排序的则为空 |
collation_schema | sql_identifier | 包含元素类型排序规则的模式名, 如果默认或该元素的数据类型是不可排序的则为空 |
collation_name | sql_identifier | 元素类型的排序规则名, 如果默认或该元素的数据类型是不可排序的则为空 |
numeric_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
numeric_precision_radix | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
numeric_scale | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
datetime_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
interval_type | character_data | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
interval_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型 |
domain_default | character_data | 还未被实现 |
udt_catalog | sql_identifier | 元素的数据类型所在的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 元素的数据类型所在的模式名 |
udt_name | sql_identifier | 模式的数据类型名 |
scope_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
maximum_cardinality | cardinal_number | 总是空,因为数组在PostgreSQL中总是有无限制的最大势 |
dtd_identifier | sql_identifier | 该元素的数据类型描述符的标识符。当前无用。 |
二十四、enabled_roles
视图enabled_roles
标识当前“已被启用的角色”。已被启用的角色被递归地定义为:当前用户以及被授予给具有自动继承的已被启用角色的所有角色。换句话说,就是当前用户是其直接或间接成员的所有角色。
为了权限检查,“可应用角色”的集合被应用,它会比已被启用角色的集合包含的角色范围更宽。因此通常使用视图applicable_roles
要更好,applicable_roles
视图的详情请见第五节。
表 3.22. enabled_roles
列
名称 | 数据类型 | 描述 |
---|---|---|
role_name | sql_identifier | 角色名称 |
二十五、foreign_data_wrapper_options
视图foreign_data_wrapper_options
包含为当前数据库中外部数据包装器定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部数据包装器被显示。
表 3.23. foreign_data_wrapper_options
列
名称 | 数据类型 | 描述 |
---|---|---|
foreign_data_wrapper_catalog | sql_identifier | 该外部数据包装器所在的数据库名(总是当前数据库) |
foreign_data_wrapper_name | sql_identifier | 该外部数据包装器的名字 |
option_name | sql_identifier | 一个选项名 |
option_value | character_data | 该选项的值 |
二十六、foreign_data_wrappers
视图foreign_data_wrappers
包含定义在当前数据库中的所有外部数据包装器。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部数据包装器才会被显示。
表 3.24. foreign_data_wrappers
列
名称 | 数据类型 | 描述 |
---|---|---|
foreign_data_wrapper_catalog | sql_identifier | 包含该外部数据包装器的数据库名(总是当前数据库) |
foreign_data_wrapper_name | sql_identifier | 外部数据包装器的名字 |
authorization_identifier | sql_identifier | 外部服务器拥有者的名字 |
library_name | character_data | 实现这个外部数据包装器的库文件名 |
foreign_data_wrapper_language | character_data | 用于实现这个外部数据包装器的语言 |
二十七、foreign_server_options
视图foreign_server_options
包含为当前数据库中外部服务器定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部服务器才会被显示。
表 3.25. foreign_server_options
列
名称 | 数据类型 | 描述 |
---|---|---|
foreign_server_catalog | sql_identifier | 该外部服务器所在的数据库名(总是当前数据库) |
foreign_server_name | sql_identifier | 该外部服务器的名字 |
option_name | sql_identifier | 一个选项名 |
option_value | character_data | 该选项的值 |
二十八、foreign_servers
视图foreign_servers
包含当前数据库中定义的所有外部服务器。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部服务器才会被显示。
表 3.26. foreign_servers
列
名称 | 数据类型 | 描述 |
---|---|---|
foreign_server_catalog | sql_identifier | 该外部服务器所在的数据库名(总是当前数据库) |
foreign_server_name | sql_identifier | 该外部服务器的名字 |
foreign_data_wrapper_catalog | sql_identifier | 包含被该外部服务器使用的外部数据包装器的数据库名(总是当前数据库) |
foreign_data_wrapper_name | sql_identifier | 被该外部服务器所使用的外部数据包装器的名字 |
foreign_server_type | character_data | 外部服务器类型信息(如果在创建时指定过) |
foreign_server_version | character_data | 外部服务器版本信息(如果在创建时指定过) |
authorization_identifier | sql_identifier | 该外部服务器的拥有者名字 |
二十九、foreign_table_options
视图foreign_table_options
包含为当前数据库中外部表定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部表才会被显示。
表 3.27. foreign_table_options
列
名称 | 数据类型 | 描述 |
---|---|---|
foreign_table_catalog | sql_identifier | 包含该外部表的数据库名(总是当前数据库) |
foreign_table_schema | sql_identifier | 包含该外部表的模式名 |
foreign_table_name | sql_identifier | 外部表的名字 |
option_name | sql_identifier | 一个选项名 |
option_value | character_data | 该选项的值 |
三十、foreign_tables
视图foreign_tables
包含定义在当前数据库中的所有外部表。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部表才会被显示。
表 3.28. foreign_tables
列
名称 | 数据类型 | 描述 |
---|---|---|
foreign_table_catalog | sql_identifier | 该外部表所在的数据库名(总是当前数据库) |
foreign_table_schema | sql_identifier | 包含该外部表的模式名 |
foreign_table_name | sql_identifier | 该外部表的名字 |
foreign_server_catalog | sql_identifier | 该外部服务器所在的数据库名(总是当前数据库) |
foreign_server_name | sql_identifier | 该外部服务器的名字 |
三十一、key_column_usage
视图key_column_usage
标识当前数据库中所有被某种唯一、主键或外键约束限制的列。检查约束不被包括在这个视图中。只有那些当前用户能够访问的列才会被显示(作为拥有者或具有某些特权)。
表 3.29. key_column_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
table_catalog | sql_identifier | 包含被这个约束限制的列的表所在的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含被这个约束限制的列的表所在的模式名 |
table_name | sql_identifier | 包含被这个约束限制的列的表的名字 |
column_name | sql_identifier | 被这个约束限制的列名 |
ordinal_position | cardinal_number | 该列在约束键中的顺序位置(从 1 开始计数) |
position_in_unique_constraint | cardinal_number | 对于一个外键约束,被引用行在其唯一约束中的顺序位置(从 1 开始计数);对于其他约束为空 |
三十二、parameters
视图parameters
包含当前数据库中所有函数的参数的有关信息。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数才会被显示。
表 3.30. parameters
列
名称 | 数据类型 | 描述 |
---|---|---|
specific_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
specific_schema | sql_identifier | 包含该函数的模式名 |
specific_name | sql_identifier | 该函数的“专用名”。详见第四十节。 |
ordinal_position | cardinal_number | 该参数在函数参数列表中的顺序位置(从 1 开始计数) |
parameter_mode | character_data | IN 表示输入参数, OUT 表示输出参数, INOUT 表示输入输出参数。 |
is_result | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
as_locator | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
parameter_name | sql_identifier | 参数名,如果参数没有名称则为空 |
data_type | character_data | 该参数的数据类型如果是一种内建类型,这里是该参数的数据类型;如果是某种数组(此种情况见视图element_types ),则为ARRAY ;否则为USER-DEFINED (此种情况中,该类型被标识在udt_name 和相关列中)。 |
character_maximum_length | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
character_octet_length | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_catalog | sql_identifier | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
collation_schema | sql_identifier | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
collation_name | sql_identifier | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
numeric_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
numeric_precision_radix | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
numeric_scale | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
datetime_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
interval_type | character_data | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
interval_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
udt_catalog | sql_identifier | 该参数的数据类型所在的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 该参数的数据类型所在的模式名 |
udt_name | sql_identifier | 该参数的数据类型的名字 |
scope_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
maximum_cardinality | cardinal_number | 总是空,因为数组在PostgreSQL中总是有无限制的最大势 |
dtd_identifier | sql_identifier | 该参数的数据类型描述符的一个标识符,在从属于该函数的数据类型标识符之中唯一(这不重要,因为一个域只包含一个数据类型描述符)。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。 |
parameter_default | character_data | 该参数的默认表达式,如果没有或者该函数不被一个当前启用的角色拥有则为空值。 |
三十三、referential_constraints
视图referential_constraints
包含当前数据库中的所有引用(外键)约束。只有那些当前用户具有其引用表上写权限(作为拥有者或具有某些除SELECT
之外的特权)的约束才会被显示。
表 3.31. referential_constraints
列
名称 | 数据类型 | 描述 |
---|---|---|
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
unique_constraint_catalog | sql_identifier | 包含该外键约束所引用的唯一或主键约束的数据库名(总是当前数据库) |
unique_constraint_schema | sql_identifier | 包含该外键约束所引用的唯一或主键约束的模式名 |
unique_constraint_name | sql_identifier | 包含该外键约束所引用的唯一或主键约束的名字 |
match_option | character_data | 外键约束的匹配选项: FULL 、PARTIAL 或NONE 。 |
update_rule | character_data | 外键约束的更新规则: CASCADE 、SET NULL 、 SET DEFAULT 、RESTRICT 或 NO ACTION 。 |
delete_rule | character_data | 外键约束的删除规则: CASCADE 、SET NULL 、 SET DEFAULT 、RESTRICT 或 NO ACTION 。 |
三十四、role_column_grants
视图role_column_grants
标识所有在列上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在column_privileges
中找到。这个视图和column_privileges
之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC
的方式使当前用户获得其访问权限的列。
表 3.32. role_column_grants
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
table_catalog | sql_identifier | 包含该列的表所在的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该列的表所在的模式名 |
table_name | sql_identifier | 包含该列的表名 |
column_name | sql_identifier | 列名称 |
privilege_type | character_data | 特权类型:SELECT 、 INSERT 、UPDATE 或 REFERENCES |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
三十五、role_routine_grants
视图role_routine_grants
标识所有在函数上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在routine_privileges
中找到。这个视图和routine_privileges
之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC
的方式使当前用户获得其访问权限的函数。
表 3.33. role_routine_grants
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
specific_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
specific_schema | sql_identifier | 包含该函数的模式名 |
specific_name | sql_identifier | 该函数的“专用名”。详见第四十节。 |
routine_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
routine_schema | sql_identifier | 包含该函数的模式名 |
routine_name | sql_identifier | 该函数的名字(在重载的情况下可能会重复) |
privilege_type | character_data | 总是为EXECUTE (函数唯一的特权类型) |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
三十六、role_table_grants
视图role_table_grants
标识所有在表或视图上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在table_privileges
中找到。这个视图和table_privileges
之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC
的方式使当前用户获得其访问权限的表。
表 3.34. role_table_grants
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
table_catalog | sql_identifier | 包含该表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该表的模式名 |
table_name | sql_identifier | 表名称 |
privilege_type | character_data | 该特权的类型:SELECT 、 INSERT 、UPDATE 、 DELETE 、TRUNCATE 、 REFERENCES 或TRIGGER |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
with_hierarchy | yes_or_no | 在 SQL 标准中,WITH HIERARCHY OPTION 是一个独立的(子)特权,它允许在表继承层级上的特定操作。在 PostgreSQL 中,这被包括在SELECT 特权中,因此这一列在特权为SELECT 时显示YES ,其他时候显示NO 。 |
三十七、role_udt_grants
视图role_udt_grants
标识所有在用户定义类型上授予的USAGE
特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在udt_privileges
中找到。这个视图和udt_privileges
之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC
的方式使当前用户获得其访问权限的对象。因为数据类型在 PostgreSQL 中并没有真正的特权,而是只有一个给PUBLIC
的隐式授予,这个视图为空。
表 3.35. role_udt_grants
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
udt_catalog | sql_identifier | 包含该类型的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 包含该类型的模式名 |
udt_name | sql_identifier | 该类型的名字 |
privilege_type | character_data | 总是TYPE USAGE |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
三十八、role_usage_grants
视图role_usage_grants
标识所有在多种对象上授予的USAGE
特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在usage_privileges
中找到。这个视图和usage_privileges
之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC
的方式使当前用户获得其访问权限的对象。
表 3.36. role_usage_grants
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
object_catalog | sql_identifier | 包含该对象的数据库名(总是当前数据库) |
object_schema | sql_identifier | 如果适用,则为包含该对象的模式名,否则为一个空字符串 |
object_name | sql_identifier | 对象的名字 |
object_type | character_data | COLLATION 或DOMAIN 或FOREIGN DATA WRAPPER 或FOREIGN SERVER 或SEQUENCE |
privilege_type | character_data | 总是USAGE |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
三十九、routine_privileges
视图routine_privileges
标识所有在函数上授予的特权,其授予者或被授予者是一个当前已被启用的角色。对于每一种函数、授予者和被授予者的组合,这里都有一行。
表 3.37. routine_privileges
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
specific_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
specific_schema | sql_identifier | 包含该函数的模式名 |
specific_name | sql_identifier | 该函数的“专用名”。详见第四十节。 |
routine_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
routine_schema | sql_identifier | 包含该函数的模式名 |
routine_name | sql_identifier | 该函数的名字(在重载的情况下可能重复) |
privilege_type | character_data | 总是EXECUTE (函数唯一的特权类型) |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
四十、routines
视图routines
包含当前数据库中所有的函数和过程。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数和过程才会被显示。
表 3.38. routines
列
名称 | 数据类型 | 描述 |
---|---|---|
specific_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
specific_schema | sql_identifier | 包含该函数的模式名 |
specific_name | sql_identifier | 该函数的“专用名”。这是一个在模式中唯一标识该函数的名称,即使该函数真正的名称已经被重载。专用名的格式尚未被定义,它应当仅被用来与指定例程名称的其他实例进行比较。 |
routine_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
routine_schema | sql_identifier | 包含该函数的模式名 |
routine_name | sql_identifier | 该函数的名字(在重载的情况下可能重复) |
routine_type | character_data | FUNCTION 表示是一个函数,PROCEDURE 表示是一个过程 |
module_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
module_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
module_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
udt_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
udt_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
udt_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
data_type | character_data | 该函数的返回数据类型如果是一种内建类型,这里是该数据类型;如果是某种数组(此种情况见视图element_types ),则为ARRAY ;否则为USER-DEFINED (此种情况中,该类型被标识在type_udt_name 和相关列中)。如果是过程则此项为空。 |
character_maximum_length | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
character_octet_length | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_catalog | sql_identifier | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
collation_schema | sql_identifier | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
collation_name | sql_identifier | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
numeric_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
numeric_precision_radix | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
numeric_scale | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
datetime_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
interval_type | character_data | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
interval_precision | cardinal_number | 总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型 |
type_udt_catalog | sql_identifier | 该函数的返回数据类型所在的数据库名(总是当前数据库)。如果是过程则此项为空。 |
type_udt_schema | sql_identifier | 该函数的返回数据类型所在的模式名。如果是过程则此项为空。 |
type_udt_name | sql_identifier | 该函数的返回数据类型的名字。如果是过程则此项为空。 |
scope_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
scope_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
maximum_cardinality | cardinal_number | 总是空,因为数组在PostgreSQL中总是有无限制的最大势 |
dtd_identifier | sql_identifier | 该函数返回数据类型的数据类型描述符的一个标识符,在从属于该函数的数据类型标识符之中唯一。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。 |
routine_body | character_data | 如果该函数是一个 SQL 函数,则为SQL ,否则为EXTERNAL 。 |
routine_definition | character_data | 该函数的源文本(如果该函数不属于一个当前已被启用的角色,则为空)。(根据 SQL 标准,只有routine_body 为SQL 时这一列才适用。但是在PostgreSQL中,它将会包含该函数被创建时所指定的任何源文本。) |
external_name | character_data | 如果这个函数是一个 C 函数,则为该函数的外部名称(链接符号),否则为空(这会产生和显示在routine_definition 中相同的值)。 |
external_language | character_data | 该函数所用的语言 |
parameter_style | character_data | 总是GENERAL (SQL 标准定义了其他参数风格,但在PostgreSQL中不可用) |
is_deterministic | yes_or_no | 如果该函数被声明为不变(在 SQL 标准中被称为确定性的),则为YES ,否则为NO (你不能通过该信息模式查询在PostgreSQL中可用的其他易变级别)。 |
sql_data_access | character_data | 总是MODIFIES ,表示该函数可能修改 SQL 数据。这种信息对PostgreSQL没有用处。 |
is_null_call | yes_or_no | 如果该函数在任一参数为空时自动返回空值,则为YES ,否则为NO 。如果是过程则此项为空。 |
sql_path | character_data | 应用于一个PostgreSQL中不可用的特性 |
schema_level_routine | yes_or_no | 总是YES (反例是一个用户定义类型的方法,这是在PostgreSQL不可用的一种特性)。 |
max_dynamic_result_sets | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
is_user_defined_cast | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
is_implicitly_invocable | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
security_type | character_data | 如果该函数以当前用户的特权运行,则为INVOKER ;如果该函数以定义它的用户的特权运行,则为DEFINER 。 |
to_sql_specific_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
to_sql_specific_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
to_sql_specific_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
as_locator | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
created | time_stamp | 应用于一个PostgreSQL中不可用的特性 |
last_altered | time_stamp | 应用于一个PostgreSQL中不可用的特性 |
new_savepoint_level | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
is_udt_dependent | yes_or_no | 当前总是NO 。另一个选项YES 应用于一个PostgreSQL中不可用的特性。 |
result_cast_from_data_type | character_data | 应用于一个PostgreSQL中不可用的特性 |
result_cast_as_locator | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
result_cast_char_max_length | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
result_cast_char_octet_length | character_data | 应用于一个PostgreSQL中不可用的特性 |
result_cast_char_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_char_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_char_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_collation_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_collation_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_collation_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_numeric_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
result_cast_numeric_precision_radix | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
result_cast_numeric_scale | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
result_cast_datetime_precision | character_data | 应用于一个PostgreSQL中不可用的特性 |
result_cast_interval_type | character_data | 应用于一个PostgreSQL中不可用的特性 |
result_cast_interval_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
result_cast_type_udt_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_type_udt_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_type_udt_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_scope_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_scope_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_scope_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
result_cast_maximum_cardinality | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
result_cast_dtd_identifier | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
四十一、schemata
视图schemata
包含当前数据库中被当前用户(作为属主或具有某些特权)可访问的所有模式。
表 3.39. schemata
列
名称 | 数据类型 | 描述 |
---|---|---|
catalog_name | sql_identifier | 该模式所在的数据库名(总是当前数据库) |
schema_name | sql_identifier | 该模式的名称 |
schema_owner | sql_identifier | 该模式拥有者的名称 |
default_character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
default_character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
default_character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
sql_path | character_data | 应用于一个PostgreSQL中不可用的特性 |
四十二、sequences
视图sequences
包含所有定义在当前数据库中的序列。只有那些当前用户能够访问(作为拥有者或具有某些特权)的序列才会被显示。
表 3.40. sequences
列
名称 | 数据类型 | 描述 |
---|---|---|
sequence_catalog | sql_identifier | 包含该序列的数据库名(总是当前数据库) |
sequence_schema | sql_identifier | 包含该序列的模式名 |
sequence_name | sql_identifier | 该序列的名字 |
data_type | character_data | 该序列的数据类型。 |
numeric_precision | cardinal_number | 这列包含这个序列数据类型(见上文)的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。 |
numeric_precision_radix | cardinal_number | 这一列指示numeric_precision 和numeric_scale 列中的值是基于什么来表示。该值为 2 或 10。 |
numeric_scale | cardinal_number | 这列包含这个序列数据类型(见上文)的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix 中指定的被表示为十进制(基于 10)或二进制(基于 2)。 |
start_value | character_data | 该序列的开始值 |
minimum_value | character_data | 该序列的最小值 |
maximum_value | character_data | 该序列的最大值 |
increment | character_data | 该序列的增量 |
cycle_option | yes_or_no | 如果该序列会循环,则为YES ,否则为NO |
注意依照 SQL 标准,开始值、最小值、最大值和增量值被作为字符串返回。
四十三、sql_features
表sql_features
包含的信息指示了哪些 SQL 标准中定义的正式特性被PostgreSQL所支持。这里你也能找到一些额外的背景信息。
表 3.41. sql_features
列
名称 | 数据类型 | 描述 |
---|---|---|
feature_id | character_data | 该特性的标识符字符串 |
feature_name | character_data | 该特性的描述性名称 |
sub_feature_id | character_data | 该子特性的标识符字符串,或者如果不是一个子特性则为一个长度为零的字符串 |
sub_feature_name | character_data | 该子特性的描述性名称,或者如果不是一个子特性则为一个长度为零的字符串 |
is_supported | yes_or_no | 如果该特性被当前版本的PostgreSQL完全支持,则为YES ,否则为NO |
is_verified_by | character_data | 总是为空,因为PostgreSQL开发组没有对特性的一致性执行正式的测试 |
comments | character_data | 可能会是关于该特性被支持状态的一段注释 |
四十四、sql_implementation_info
表sql_implementation_info
包含的信息指示剩下的由 SQL 标准实现定义的多个方面。这类信息主要用来在 ODBC 接口的情境中使用;其它接口的用户可能将发现这类信息用处不大。由于这个原因,个体实现信息项没有在这里描述,你将会在 ODBC 接口的描述中找到它们。
表 3.42. sql_implementation_info
列
名称 | 数据类型 | 描述 |
---|---|---|
implementation_info_id | character_data | 该实现信息项的标识符字符串 |
implementation_info_name | character_data | 该实现信息项的描述性名称 |
integer_value | cardinal_number | 该实现信息项的值,如果该值被包含在character_value 列中则为空 |
character_value | character_data | 该实现信息项的值,如果该值被包含在integer_value 列中则为空 |
comments | character_data | 可能是从属于该实现信息项的一段注释 |
四十五、sql_languages
表sql_languages
为每一种被PostgreSQL支持的 SQL 语言绑定包含一行。PostgreSQL支持在 C 中的直接 SQL 和嵌入式 SQL,这是你从这张表中知道的所有东西。
这个表在 SQL:2008 中已被从 SQL 标准中移除,因此这里没有项引用 SQL:2003 之后的标准。
表 3.43. sql_languages
列
名称 | 数据类型 | 描述 |
---|---|---|
sql_language_source | character_data | 该语言定义的源名称,总是ISO 9075 ,即 SQL 标准 |
sql_language_year | character_data | sql_language_source 中引用的标准被通过的年份。 |
sql_language_conformance | character_data | 该语言绑定的标准一致性级别。对于 ISO 9075:2003 总是CORE 。 |
sql_language_integrity | character_data | 总是为空(这个值与一个早期版本的 SQL 标准相关)。 |
sql_language_implementation | character_data | 总是为空 |
sql_language_binding_style | character_data | 语言绑定风格,为DIRECT 或EMBEDDED |
sql_language_programming_language | character_data | 如果绑定风格为EMBEDDED ,则为编程语言,否则为空。PostgreSQL仅支持 C 语言。 |
四十六、sql_packages
表sql_packages
包含的信息指示哪些定义在 SQL 标准中的特性包被PostgreSQL支持。
表 3.44. sql_packages
列
名称 | 数据类型 | 描述 |
---|---|---|
feature_id | character_data | 该包的标识符字符串 |
feature_name | character_data | 该包的描述性名称 |
is_supported | yes_or_no | 如果该包被当前版本的PostgreSQL支持,则为YES ,否则为NO |
is_verified_by | character_data | 总是为空,因为PostgreSQL开发组没有对特性的一致性执行正式的测试 |
comments | character_data | 可能会是关于该包被支持状态的一段注释 |
四十七、sql_parts
表sql_parts
包含的信息指示哪些定义在 SQL 标准中的部分被PostgreSQL支持。
表 3.45. sql_parts
列
名称 | 数据类型 | 描述 |
---|---|---|
feature_id | character_data | 包含该部分编号的一个标识符字符串 |
feature_name | character_data | 该部分的描述性名称 |
is_supported | yes_or_no | 如果当前版本的PostgreSQL完全支持该部分,则为YES ,否则为NO |
is_verified_by | character_data | 总是为空,因为PostgreSQL开发组没有对特性的一致性执行正式的测试 |
comments | character_data | 可能会是关于该部分被支持状态的一段注释 |
四十八、sql_sizing
表sql_sizing
包含有关PostgreSQL中多种尺寸限制和最大值的信息。这类信息主要用来在 ODBC 接口的情境中使用;其它接口的用户可能将发现这类信息用处不大。由于这个原因,个体实现信息项没有在这里描述,你将会在 ODBC 接口的描述中找到它们。
表 3.46. sql_sizing
列
名称 | 数据类型 | 描述 |
---|---|---|
sizing_id | cardinal_number | 该尺寸项的标识符 |
sizing_name | character_data | 该尺寸项的描述性名称 |
supported_value | cardinal_number | 尺寸项的值,如果尺寸是不受限制或不能确定的则为 0,如果尺寸项适用的特性不受支持则为空 |
comments | character_data | 可能是从属于尺寸项的一段注释 |
四十九、sql_sizing_profiles
表sql_sizing_profiles
包含有关 SQL 标准的多种 profile 所需的sql_sizing
值的信息。PostgreSQL不追踪任何 SQL profile,因此这个表为空。
表 3.47. sql_sizing_profiles
列
名称 | 数据类型 | 描述 |
---|---|---|
sizing_id | cardinal_number | 该尺寸项的标识符 |
sizing_name | character_data | 该尺寸项的描述性名称 |
profile_id | character_data | 一个 profile 的标识符字符串 |
required_value | cardinal_number | 该 SQL profile 对尺寸项所要求的值,如果该 profile 对尺寸项没有限制则为 0,如果该 profile 不要求该尺寸项所适用的任何特性则为空 |
comments | character_data | 可能是从属于该 profile 中尺寸项的一段注释 |
五十、table_constraints
视图table_constraints
包含属于特定表的所有约束,这些表要满足的条件是:当前用户拥有表或者是当前用户在表上具有某种除SELECT
之外的特权。
表 3.48. table_constraints
列
名称 | 数据类型 | 描述 |
---|---|---|
constraint_catalog | sql_identifier | 包含该约束的数据库名(总是当前数据库) |
constraint_schema | sql_identifier | 包含该约束的模式名 |
constraint_name | sql_identifier | 约束名 |
table_catalog | sql_identifier | 包含该表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该表的模式名 |
table_name | sql_identifier | 表名称 |
constraint_type | character_data | 该约束的类型:CHECK 、 FOREIGN KEY 、PRIMARY KEY 或UNIQUE |
is_deferrable | yes_or_no | 如果该约束是可延迟的,则为YES ,否则为NO |
initially_deferred | yes_or_no | 如果该约束是可延迟的并且是初始已被延迟,则为YES ,否则为NO |
enforced | yes_or_no | 适用于一种PostgreSQL中不可用的特性(当前总是YES ) |
五十一、table_privileges
视图table_privileges
标识在表或视图上所有被授予的特权,这些特权必须是被一个当前已被启用角色授出或者被授予给一个当前已被启用角色。对每一个表、授予者和被授予者的组合都有一行。
表 3.49. table_privileges
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
table_catalog | sql_identifier | 包含该表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该表的模式名 |
table_name | sql_identifier | 表名称 |
privilege_type | character_data | 特权类型:SELECT 、 INSERT 、UPDATE 、 DELETE 、TRUNCATE 、 REFERENCES 或TRIGGER |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
with_hierarchy | yes_or_no | 在 SQL 标准中,WITH HIERARCHY OPTION 是一个独立的(子)特权,它允许在表继承层级上的特定操作。在 PostgreSQL 中,这被包括在SELECT 特权中,因此这一列在特权为SELECT 时显示YES ,其他时候显示NO 。 |
五十二、tables
视图tables
包含定义在当前数据库中的所有表和视图。只有那些当前用户能够访问(作为拥有者或具有某些特权)的表和视图才会被显示。
表 37.50. tables
列
名称 | 数据类型 | 描述 |
---|---|---|
table_catalog | sql_identifier | 包含该表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该表的模式名 |
table_name | sql_identifier | 表名称 |
table_type | character_data | 该表的类型:BASE TABLE 表示一个持久的基本表(常见表类型),VIEW 表示一个视图,FOREIGN 表示一个外部表,LOCAL TEMPORARY 表示一个临时表 |
self_referencing_column_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
reference_generation | character_data | 应用于一个PostgreSQL中不可用的特性 |
user_defined_type_catalog | sql_identifier | 如果该表是一个有类型的表,则是包含其底层数据类型的数据库名(总是当前数据库),否则为空。 |
user_defined_type_schema | sql_identifier | 如果该表是一个有类型的表,则是包含其底层数据类型的模式名,否则为空。 |
user_defined_type_name | sql_identifier | 如果该表是一个有类型的表,则是其底层数据类型的名称,否则为空。 |
is_insertable_into | yes_or_no | 如果该表能够被插入,则为YES ,否则为NO (基本表总是能被插入,而视图则不一定)。 |
is_typed | yes_or_no | 如果该表是一个有类型的表,则为YES ,否则为NO |
commit_action | character_data | 还未被实现 |
五十三、transforms
视图transforms
包含定义在当前数据库中的转换的信息。更准确 来说, 包含在转换中的每一个函数(“FROM SQL”或者 “TO SQL”函数)在其中都有一行。
表 3.51. transforms
列
名称 | 数据类型 | 描述 |
---|---|---|
udt_catalog | sql_identifier | 包含该转换所适用类型的数据库的名称(总是当前数据库) |
udt_schema | sql_identifier | 包含该转换所适用类型的模式的名称 |
udt_name | sql_identifier | 该转换所适用类型的名称 |
specific_catalog | sql_identifier | 包含该函数的数据库的名称(总是当前数据库) |
specific_schema | sql_identifier | 包含该函数的模式的名称 |
specific_name | sql_identifier | 该函数的“专用名”。更多信息请见第 37.40 节。 |
group_name | sql_identifier | SQL 标准允许在“组”中定义转换,并且在运行时选择一个 组。PostgreSQL 不支持这种做法,转换是与一种语言相关的。作为一种折衷, 这个域包含该转换所适用的语言。 |
transform_type | character_data | FROM SQL 或者TO SQL |
五十四、triggered_update_columns
对于当前数据库中指定一个列列表(如UPDATE OF column1, column2
)的触发器,视图triggered_update_columns
标识这些列。没有指定一个列列表的触发器不被包括在这个视图中。只有那些当前用户拥有或具有某种除SELECT
之外特权的列才会被显示。
表 3.52. triggered_update_columns
列
名称 | 数据类型 | 描述 |
---|---|---|
trigger_catalog | sql_identifier | 包含该触发器的数据库名(总是当前数据库) |
trigger_schema | sql_identifier | 包含该触发器的模式名 |
trigger_name | sql_identifier | 该触发器的名称 |
event_object_catalog | sql_identifier | 包含触发器所在的表的数据库名(总是当前数据库) |
event_object_schema | sql_identifier | 包含触发器所在的表的模式名 |
event_object_table | sql_identifier | 触发器所在的表的名称 |
event_object_column | sql_identifier | 触发器所在的列的名称 |
五十五、triggers
视图triggers
包含所有定义在当前数据库中表和视图上的触发器,并且只显示当前用户拥有的触发器或者是当前用户在其上具有某种除SELECT
之外特权的触发器。
表 3.53. triggers
列
名称 | 数据类型 | 描述 |
---|---|---|
trigger_catalog | sql_identifier | 包含该触发器的数据库名(总是当前数据库) |
trigger_schema | sql_identifier | 包含该触发器的模式名 |
trigger_name | sql_identifier | 该触发器的名称 |
event_manipulation | character_data | 触发该触发器的事件(INSERT 、 UPDATE 或DELETE ) |
event_object_catalog | sql_identifier | 包含触发器所在的表的数据库名(总是当前数据库) |
event_object_schema | sql_identifier | 包含该触发器所在的表的模式名 |
event_object_table | sql_identifier | 该触发器所在的表的名称 |
action_order | cardinal_number | 同一个表上具有相同event_manipulation 、action_timing 和action_orientation 的触发器之间的触发顺序。在PostgreSQL中,触发器按照名称顺序被触发,因此这一列会反映这种规则。 |
action_condition | character_data | 触发器的WHEN 条件,如果没有则为空(如果该表不被一个当前已启用角色拥有也是为空) |
action_statement | character_data | 该触发器执行的语句(当前总是 EXECUTE FUNCTION ) |
action_orientation | character_data | 标识触发器是对每个被处理的行触发一次还是为每个语句触发一次(ROW 或STATEMENT ) |
action_timing | character_data | 触发器在什么时候触发(BEFORE 、 AFTER 或INSTEAD OF ) |
action_reference_old_table | sql_identifier | “旧”传递表的名称,如果没有则为空 |
action_reference_new_table | sql_identifier | “新”传递表的名称,如果没有则为空 |
action_reference_old_row | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
action_reference_new_row | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
created | time_stamp | 应用于一个PostgreSQL中不可用的特性 |
PostgreSQL中的触发器有两点与 SQL 标准不兼容,这会影响在该信息模式中的表示。第一,在PostgreSQL中触发器的名字是局限于每个表的,而不是独立于模式对象。因此可能在一个模式中会有重复的触发器名称,只要它们属于不同的表(trigger_catalog
和trigger_schema
才真正标识了触发器被定义在哪个表上)。第二,在PostgreSQL中触发器可以被定义为在多个事件上触发(例如ON INSERT OR UPDATE
),而在 SQL 标准中只允许一个。如果一个触发器被定义为在多个事件上触发,它在信息模式中被表示为多行,每一行对应于一类事件。作为这两个问题的结果,视图triggers
的主键实际上是(trigger_catalog, trigger_schema, event_object_table, trigger_name, event_manipulation)
,而不是(trigger_catalog, trigger_schema, trigger_name)
(这是 SQL 标准指定的)。尽管如此,如果你以符合 SQL 标准(在模式中触发器名称唯一并且每个触发器只能有一种事件类型)的方式定义你的触发器,这将不会影响你。
注意:
在PostgreSQL 9.1 之前,这个视图的列
action_timing
、action_reference_old_table
、action_reference_new_table
、action_reference_old_row
和action_reference_new_row
分别被命名为condition_timing
、condition_reference_old_table
、condition_reference_new_table
、condition_reference_old_row
和condition_reference_new_row
。 那也是它们在 SQL:1999 标准中的命名。新的命名遵循 SQL:2003 及其后的版本。
五十六、udt_privileges
视图udt_privileges
标识所有在用户定义类型上授予的 USAGE
特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。 对每一个类型、授予者和被授予者的组合都有一行。这个视图只显示组合类型(原因见下面的 第五十八节)。 域特权见第五十七节。
表 3.54. udt_privileges
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
udt_catalog | sql_identifier | 包含该类型的数据库名(总是当前数据库) |
udt_schema | sql_identifier | 包含该类型的模式名 |
udt_name | sql_identifier | 该类型的名字 |
privilege_type | character_data | 总是TYPE USAGE |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
五十七、usage_privileges
视图usage_privileges
标识所有在多种对象上授予的USAGE
特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。在PostgreSQL中,这当前适用于排序规则、域、外部数据包装器、外部服务器和序列。对每一个对象、授予者和被授予者都有一行。
由于在PostgreSQL中排序规则并没有真正的特权,这个视图对所有排序规则显示由拥有者授予给PUBLIC
的隐式非可授予的USAGE
特权。但是对其他对象类型则显示真实的特权。
在 PostgreSQL 中,序列也支持除USAGE
之外的SELECT
和UPDATE
特权。这些是非标准的并且因此在该信息模式中不可见。
表 3.55. usage_privileges
列
名称 | 数据类型 | 描述 |
---|---|---|
grantor | sql_identifier | 授予该特权的角色名 |
grantee | sql_identifier | 被授予该特权的角色名 |
object_catalog | sql_identifier | 包含该对象的数据库名(总是当前数据库) |
object_schema | sql_identifier | 如果适用,则是包含该对象的模式名,否则为一个空字符串 |
object_name | sql_identifier | 该对象的名称 |
object_type | character_data | COLLATION 或DOMAIN 或FOREIGN DATA WRAPPER 或FOREIGN SERVER 或SEQUENCE |
privilege_type | character_data | 总是USAGE |
is_grantable | yes_or_no | 如果该特权是可授予的,则为YES ,否则为NO |
五十八、user_defined_types
视图user_defined_types
目前包含定义在当前数据库中的所有组合类型。只有那些当前用户能够访问(作为拥有者或具有某些特权)的类型才会被显示。
SQL 知道两种用户定义类型:结构类型(在PostgreSQL中也被称为组合类型)以及独特类型(在PostgreSQL没有实现)。要经得起未来的考验,请使用列user_defined_type_category
来区分它们。其他用户定义类型如基类型和枚举(都是PostgreSQL的扩展)不会被显示在这里。对于域,请见第二十二节。
表 3.56. user_defined_types
列
名称 | 数据类型 | 描述 |
---|---|---|
user_defined_type_catalog | sql_identifier | 包含该类型的数据库名(总是当前数据库) |
user_defined_type_schema | sql_identifier | 包含该类型的模式名 |
user_defined_type_name | sql_identifier | 该类型的名字 |
user_defined_type_category | character_data | 当前总是STRUCTURED |
is_instantiable | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
is_final | yes_or_no | 应用于一个PostgreSQL中不可用的特性 |
ordering_form | character_data | 应用于一个PostgreSQL中不可用的特性 |
ordering_category | character_data | 应用于一个PostgreSQL中不可用的特性 |
ordering_routine_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
ordering_routine_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
ordering_routine_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
reference_type | character_data | 应用于一个PostgreSQL中不可用的特性 |
data_type | character_data | 应用于一个PostgreSQL中不可用的特性 |
character_maximum_length | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
character_octet_length | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
character_set_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
character_set_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_catalog | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_schema | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
collation_name | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
numeric_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
numeric_precision_radix | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
numeric_scale | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
datetime_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
interval_type | character_data | 应用于一个PostgreSQL中不可用的特性 |
interval_precision | cardinal_number | 应用于一个PostgreSQL中不可用的特性 |
source_dtd_identifier | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
ref_dtd_identifier | sql_identifier | 应用于一个PostgreSQL中不可用的特性 |
五十九、user_mapping_options
视图user_mapping_options
包含在当前数据库中为用户映射定义的所有选项。只有那些当前用户能够访问其相应外部服务器(作为拥有者或具有某些特权)的用户映射才会被显示。
表 3.57. user_mapping_options
列
名称 | 数据类型 | 描述 |
---|---|---|
authorization_identifier | sql_identifier | 被映射的用户名,如果映射是公共的则为PUBLIC |
foreign_server_catalog | sql_identifier | 这个映射所使用的外部服务器所在的数据库名(总是当前数据库) |
foreign_server_name | sql_identifier | 这个映射所使用的外部服务器的名称 |
option_name | sql_identifier | 一个选项名 |
option_value | character_data | 选项的值。除非当前用户是被映射的用户或者映射是PUBLIC 的并且当前用户是服务器拥有者或者超级用户,这一列将显示为空。这样做的目的是保护作为用户映射选项存储的口令信息。 |
六十、user_mappings
视图user_mappings
包含定义在当前数据库中的所有用户映射。只有当前用户能够访问其对应外部服务器(作为拥有者或具有某些特权)的用户映射才会被显示。
表 3.58. user_mappings
列
名称 | 数据类型 | 描述 |
---|---|---|
authorization_identifier | sql_identifier | 被映射的用户名,如果映射是公共的则为PUBLIC |
foreign_server_catalog | sql_identifier | 这个映射所使用的外部服务器所在的数据库名(总是当前数据库) |
foreign_server_name | sql_identifier | 这个映射所使用的外部服务器的名称 |
六十一、view_column_usage
视图view_column_usage
标识被使用在一个视图的查询表达式(定义该视图的SELECT
语句)中的所有列。只有当包含一列的表被一个当前已被启用角色拥有时,该列才会被包括在这个视图中。
注意:
系统表列不被包括。在某个时候这应该会被修复。
表 3.59. view_column_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
view_catalog | sql_identifier | 包含该视图的数据库名(总是当前数据库) |
view_schema | sql_identifier | 包含该视图的模式名 |
view_name | sql_identifier | 该视图的名称 |
table_catalog | sql_identifier | 被视图所使用的列所属表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 被视图所使用的列所属表的模式名 |
table_name | sql_identifier | 被视图所使用的列所属表的名称 |
column_name | sql_identifier | 被该视图所使用的列名 |
六十二、view_routine_usage
视图view_routine_usage
标识被使用在一个视图的查询表达式(定义该视图的SELECT
语句)中的所有例程(函数和过程)。只有被一个当前已被启用角色拥有的例程才会被包括在这个视图中。
表 3.60. view_routine_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
table_catalog | sql_identifier | 包含该视图的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该视图的模式名 |
table_name | sql_identifier | 该视图的名称 |
specific_catalog | sql_identifier | 包含该函数的数据库名(总是当前数据库) |
specific_schema | sql_identifier | 包含该函数的模式名 |
specific_name | sql_identifier | 该函数的“专用名”。详见第四十节。 |
六十三、view_table_usage
视图view_table_usage
标识被使用在一个视图的查询表达式(定义该视图的SELECT
语句)中的所有表。只有被一个当前已被启用角色拥有的表才会被包括在这个视图中。
注意:
系统表没有被包括。这应当会在某个时候被修复。
表 3.61. view_table_usage
列
名称 | 数据类型 | 描述 |
---|---|---|
view_catalog | sql_identifier | 包含该视图的数据库名(总是当前数据库) |
view_schema | sql_identifier | 包含该视图的模式名 |
view_name | sql_identifier | 该视图的名称 |
table_catalog | sql_identifier | 包含被该视图所使用的表的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含被该视图所使用的表的模式名 |
table_name | sql_identifier | 包含被该视图所使用的表的名称 |
六十四、views
视图views
包含定义在当前数据库中的所有视图。只有当前用户能够访问(作为拥有者或具有某些特权)的视图才会被显示。
表 3.62. views
列
名称 | 数据类型 | 描述 |
---|---|---|
table_catalog | sql_identifier | 包含该视图的数据库名(总是当前数据库) |
table_schema | sql_identifier | 包含该视图的模式名 |
table_name | sql_identifier | 该视图的名称 |
view_definition | character_data | 定义视图的查询表达式(如果该视图不被一个当前已被启用角色拥有则为空) |
check_option | character_data | 应用于一个PostgreSQL中不可用的特性 |
is_updatable | yes_or_no | 如果该视图是可更新的(允许UPDATE 和DELETE ),则为YES ,否则为NO |
is_insertable_into | yes_or_no | 如果该视图是可插入的(允许INSERT ),则为YES ,否则为NO |
is_trigger_updatable | yes_or_no | 如果该视图上有一个INSTEAD OF UPDATE 触发器,则为YES ,否则为NO |
is_trigger_deletable | yes_or_no | 如果该视图上有一个INSTEAD OF DELETE 触发器,则为YES ,否则为NO |
is_trigger_insertable_into | yes_or_no | 如果该视图上有一个INSTEAD OF INSERT 触发器,则为YES ,否则为NO |