PostgreSQL教程(三十九):客户端接口(三)之 信息模式

信息模式由一组视图构成,它们包含定义在当前数据库中对象的信息。信息模式以 SQL 标准定义,因此能够被移植并且保持稳定 — 系统目录则不同,它们是与PostgreSQL相关的并且是为了实现的考虑而建模的。不过,信息模式视图不包含与PostgreSQL-相关特性有关的信息。要咨询那些信息你需要查询系统目录或其他PostgreSQL-相关视图。

注意:

当在数据库中查询约束信息时,一个期望返回一行的标准兼容的查询可能返回多行。这是因为 SQL 标准要求约束名在一个模式中唯一,但是PostgreSQL并不强制这种限制。PostgreSQL自动产生的约束名避免在相同的模式中重复,但是用户能够指定这种重复的名称。

这个问题可能在查询信息模式视图时出现,例如check_constraint_routine_usage、 check_constraintsdomain_constraints和 referential_constraints。一些其他视图也有相似的问题,但是它们包含了表名来帮助区分重复行,例如constraint_column_usage、 constraint_table_usagetable_constraints

一、模式

信息模式本身是一个名为information_schema的模式。这个模式自动存在于所有数据库中。这个模式的拥有者是集簇中的初始数据库用户,并且该用户自然地拥有这个模式上的所有特权,包括删除它的能力(但是这样节省的空间是很小的)。

默认情况下,信息模式不在模式搜索路径中,因此你需要使用限定名访问其中的所有对象。因为信息模式中的某些对象的名称是可能出现在用户应用中的一般名称,如果你想把该信息模式放在路径中,你应该小心。

二、数据类型

信息模式视图的列使用定义在信息模式中的特殊数据类型。它们被定义为普通内建类型之上的简单域。你不应在信息模式之外使用这些类型进行工作,但是如果你的应用从信息模式中进行选择,那你的应用就必须准备好面对它们。

这些类型是:

cardinal_number

        一种非负整数。

character_data

        一种字符串(没有指定最大长度)。

sql_identifier

        一种字符串。这种类型被用于 SQL 标识符,类型character_data被用于任何其他类型的文本数据。

time_stamp

        在类型timestamp with time zone之上的一个域。

yes_or_no

        一种字符串域,它包含YESNO。这被用来在信息模式中表示布尔(真/假)(信息模式是在类型boolean被加到 SQL 标准之前被发明的,因此这个惯例是用来使信息模式向后兼容)。

信息模式中的每一列都是这五种类型之一。

三、information_schema_catalog_name

    information_schema_catalog_name是一个表,它总是包含一行和一列,其中包含了当前数据库(SQL 术语中的当前目录)的名字。

表 3.1. information_schema_catalog_name

名称数据类型描述
catalog_namesql_identifier包含这个信息模式的数据库名

四、administrable_role_authorizations

        视图administrable_role_authorizations标识当前用户对其有管理选项的所有角色。

表 3.2. administrable_role_authorizations

名称数据类型描述
granteesql_identifier被授予这个角色的成员关系的角色名(可以是当前用户,或者在嵌套角色成员关系情况下的一个不同角色)
role_namesql_identifier角色名
is_grantableyes_or_no总是 YES

五、applicable_roles

        视图applicable_roles当前用户可以使用其特权的所有角色。这意味着有某种角色授权链从当前用户到讨论中的角色。当前用户本身也是一个可应用的角色。可应用的角色的集合通常被用于权限检查。

表 3.3. applicable_roles

名称数据类型描述
granteesql_identifier被授予这个角色的成员关系的角色名(可以是当前用户,或者在嵌套角色成员关系情况下的一个不同角色)
role_namesql_identifier一个角色的名字
is_grantableyes_or_noYES表示被授予者在该角色上有管理选项,NO表示没有管理选项

六、attributes

        视图attributes包含数据库中定义的组合数据类型的属性的有关信息(注意该视图并不给出有关表列的信息,表列有时候在 PostgreSQL 上下文环境中也被称为属性)。只有当前用户能够访问(由于是拥有者获得的权限或是在类型上有某些特权)的那些属性会被显示。

表 3.4. attributes

名称数据类型描述
udt_catalogsql_identifier包含该数据类型的数据库名(总是当前数据库)
udt_schemasql_identifier包含该数据类型的模式名
udt_namesql_identifier数据类型名
attribute_namesql_identifier属性名
ordinal_positioncardinal_number属性在该数据类型内部的顺序位置(从 1 开始计算)
attribute_defaultcharacter_data该属性的默认表达式
is_nullableyes_or_no如果该属性是可能为空的,值为YES,否则为NO
data_typecharacter_data如果该属性是一个内建类型,此列值为该属性的数据类型;如果该属性是某种数组,此列值为ARRAY(在这种情况下,见视图element_types);其他情况,此列值为USER-DEFINED(在这种情况下,该类型在attribute_udt_name和相关列中标识)。
character_maximum_lengthcardinal_number如果data_type标识一个字符或位串类型,这里是声明的最大长度;如果没有声明最大长度,则对于所有其他数据类型为空。
character_octet_lengthcardinal_number如果data_type标识一个字符类型,这里是一个数据的最大可能长度(以字节计);对其他所有数据类型为空。最大字节长度取决于声明的字符最大长度(见上文)和服务器编码。
character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
collation_catalogsql_identifier包含此属性排序规则的数据库名(总是当前数据库),如果默认或者该属性的数据类型不可排序则为空
collation_schemasql_identifier包含此属性排序规则的模式名,如果默认或者该属性的数据类型不可排序则为空
collation_namesql_identifier该属性排序规则的名称,如果默认或者该属性的数据类型不可排序则为空
numeric_precisioncardinal_number如果data_type标识一种数字类型,这列包含这个属性类型的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。
numeric_precision_radixcardinal_number如果data_type标识一种数字类型,这一列指示numeric_precisionnumeric_scale列中的值是基于什么来表示。该值为 2 或 10。对于所有其他数据类型,这一列为空。
numeric_scalecardinal_number如果data_type标识一种准确数字类型,这列包含这个属性类型的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。
datetime_precisioncardinal_number如果data_type标识一种日期、时间、时间戳或时间间隔类型,这一列包含这个属性类型的(声明的或隐式的)分数秒的精度,也就是秒值的小数点后的十进制位数。对于所有其他数据类型,这一列为空。
interval_typecharacter_data如果data_type标识一种时间间隔类型,这一列包含时间间隔为这个属性包括哪些域的声明,例如YEAR TO MONTHDAY TO SECOND等等。如果没有指定域限制(也就是该时间间隔接受所有域),并且对于所有其他数据类型,这个域为空。
interval_precisioncardinal_number应用于一个PostgreSQL中不可用的特性(关于时间间隔类型属性的分数秒精度可见datetime_precision
attribute_udt_catalogsql_identifier属性数据类型被定义的数据库名(总是当前数据库)
attribute_udt_schemasql_identifier属性数据类型被定义的模式名
attribute_udt_namesql_identifier属性数据类型的名称
scope_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
scope_schemasql_identifier应用于一个PostgreSQL中不可用的特性
scope_namesql_identifier应用于一个PostgreSQL中不可用的特性
maximum_cardinalitycardinal_number总是空,因为数组在PostgreSQL中总是有无限制的最大势
dtd_identifiersql_identifier该列的数据类型描述符的一个标识符,在从属于该表的数据类型标识符之中唯一。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。
is_derived_reference_attributeyes_or_no应用于一个PostgreSQL中不可用的特性

关于某些列的详情,参见第十六节之下的一个相似结构的视图。

七、character_sets

        视图character_sets标识当前数据库中可用的字符集。因为 PostgreSQL 不支持在同一个数据库中有多个字符集,这个视图只显示一个字符集,它就是数据库编码。

注意下列术语在 SQL 标准中是怎样使用的:

字元集(character repertoire)

        字符的一个抽象集合,例如UNICODEUCSLATIN1。它不作为一个 SQL 对象显示,但是在这个视图中可见。

字符编码形式(character encoding form)

        某种字元集的一种编码。大部分较老的字元集只使用一种编码形式,并且因此它们没有独立的名字(例如LATIN1就是一种适用于LATIN1字元集的编码形式)。但是 Unicode 就有几种编码形式如UTF8UTF16等等(并非全部被 PostgreSQL 支持)。编码形式不作为一个 SQL 对象显示,但是在这个视图中可见。

字符集(character set)

        一个标识一种字元集、一种字符编码以及一种默认排序规则的命名 SQL 对象。一个预定义的字符集通常具有和一种编码形式相同的名字,但是用户可以定义其他名字。例如,字符集UTF8通常标识字元集UCS、编码形式UTF8以及某种默认排序规则。

你可以把 PostgreSQL 中的一种“编码”想成一个字符集或是一种字符编码形式。它们将具有相同的名字,并且在一个数据库中只能用其中一个。

表 3.5. character_sets

名称数据类型描述
character_set_catalogsql_identifier当前字符集并未被实现为模式对象,因此这一列为空。
character_set_schemasql_identifier当前字符集并未被实现为模式对象,因此这一列为空。
character_set_namesql_identifier该字符集的名字,当前实现为显示该数据库编码的名字
character_repertoiresql_identifier字元集,如果编码为UTF8则显示UCS,否则只显示编码名称
form_of_usesql_identifier字符编码形式,与数据库编码相同
default_collate_catalogsql_identifier包含该默认排序规则的数据库名(如果任意排序规则被标识,总是当前数据库)
default_collate_schemasql_identifier包含该默认排序规则的模式名
default_collate_namesql_identifier默认排序规则的名字。该默认排序规则被标识为匹配当前数据库的COLLATECTYPE设置的排序规则。如果没有那种排序规则,那么这一列和相关模式以及目录列为空。

八、check_constraint_routine_usage

        视图check_constraint_routine_usage标识被检查约束琐事使用的例程(函数和过程)。只有被一个当前启用的角色所拥有的例程才被显示。

表 3.6. check_constraint_routine_usage

名称数据类型描述
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名
specific_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
specific_schemasql_identifier包含该函数的模式名
specific_namesql_identifier该函数的“指定名称”。详见第四十节

九、check_constraints

        视图check_constraints包含所有检查约束,不管是定义在一个表上的还是定义在一个域上的,它们被一个当前启用的角色所拥有(表或域的拥有者就是约束的拥有者)。

表 3.7. check_constraints

名称数据类型描述
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名
check_clausecharacter_data该检查约束的检查表达式

十、collations

        视图collations包含在当前数据库中可用的排序规则。

表 3.8. collations

名称数据类型描述
collation_catalogsql_identifier包含该排序规则的数据库名(总是当前数据库)
collation_schemasql_identifier包含该排序规则的模式名
collation_namesql_identifier默认排序规则的名称
pad_attributecharacter_data总是NO PAD(另一种选择PAD SPACE没有被 PostgreSQL 支持)

十一、collation_character_set_applicability

        视图collation_character_set_applicability标识可用的排序规则适用于哪些字符集。在 PostgreSQL 中,每个数据库中只有一种字符集(解释见第七节),因此这个视图没有提供很有用的信息。

表 3.9. collation_character_set_applicability

名称数据类型描述
collation_catalogsql_identifier包含该排序规则的数据库名(总是当前数据库)
collation_schemasql_identifier包含该排序规则的模式名
collation_namesql_identifier默认排序规则的名称
character_set_catalogsql_identifier当前字符集还未被实现为模式对象,所以这一列为空
character_set_schemasql_identifier当前字符集还未被实现为模式对象,所以这一列为空
character_set_namesql_identifier字符集名称

十二、column_domain_usage

        视图column_domain_usage标识所有使用定义在当前数据库中并且被一个当前启用的角色拥有的域的列(表列或视图列)。

表 3.10. column_domain_usage

名称数据类型描述
domain_catalogsql_identifier包含该域的数据库名(总是当前数据库)
domain_schemasql_identifier包含该域的模式名
domain_namesql_identifier域名称
table_catalogsql_identifier包含该表的数据库名(总是当前数据库)
table_schemasql_identifier包含该表的模式名
table_namesql_identifier表名称
column_namesql_identifier列名称

十三、column_options

        视图column_options包含为当前数据库中外部表列定义的所有选项。只有当前用户能够访问(作为拥有者或具有某些特权)的那些外部表列才被显示。

表 3.11. column_options

名称数据类型描述
table_catalogsql_identifier包含该外部表的数据库名(总是当前数据库)
table_schemasql_identifier包含该外部表的模式名
table_namesql_identifier外部表名
column_namesql_identifier列名称
option_namesql_identifier一个选项名
option_valuecharacter_data该选项的值

十四、column_privileges

        视图column_privileges标识所有授予给一个当前启用的角色或者被一个当前启用的角色授予的特权。对每一个列、授予者、被授予者的组合只有一行。

如果一个特权被授予在一整个表上,它在这个视图中被显示为在每一列上授予,但是只有可用于列粒度的特权类型才会这样: SELECTINSERT、 UPDATEREFERENCES

表 3.12. column_privileges

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
table_catalogsql_identifier包含该列的表所在的数据库名(总是当前数据库)
table_schemasql_identifier包含该列的表所在的模式名
table_namesql_identifier包含该列的表名
column_namesql_identifier列名称
privilege_typecharacter_data特权类型:SELECT、 INSERTUPDATE或 REFERENCES
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO

十五、column_udt_usage

        视图column_udt_usage标识所有使用被一个当前启用的角色拥有的数据类型的列。注意在PostgreSQL中,内建数据类型的行为和用户定义的类型相似,因此它们也被包括在这里。详见第十六节

表 3.13. column_udt_usage

名称数据类型描述
udt_catalogsql_identifier该列数据类型(如果适用,底层的域类型)被定义的数据库名(总是当前数据库)
udt_schemasql_identifier该列数据类型(如果适用,底层的域类型)被定义的模式名
udt_namesql_identifier该列数据类型(如果适用,底层的域类型)的名称
table_catalogsql_identifier包含该表的数据库名(总是当前数据库)
table_schemasql_identifier包含该表的模式名
table_namesql_identifier表名称
column_namesql_identifier列名称

十六、columns

        视图columns包含数据库中有关所有表列(或视图列)的信息。系统列(oid等)不被包括在内。只有那些当前用户能够访问(作为拥有者或具有某些特权)的列才被显示。

表 3.14. columns

名称数据类型描述
table_catalogsql_identifier包含该表的数据库名(总是当前数据库)
table_schemasql_identifier包含该表的模式名
table_namesql_identifier表名称
column_namesql_identifier列名称
ordinal_positioncardinal_number该列在表内的顺序位置(从 1 开始计)
column_defaultcharacter_data该列的默认表达式
is_nullableyes_or_no如果该列可以为空,则为YES,否则为NO。一个非空约束是让一列成为不能为空的方法,但还有其他方法。
data_typecharacter_data如果该列的数据类型是一种内建类型,则为该列的数据类型;如果是某种数组(此种情况见视图element_types),则为ARRAY;否则为USER-DEFINED(此种情况下该类型被标识在udt_name和相关列中)。如果该列基于一个域,这一列引用该域底层的类型(该列被标识在domain_name和相关列中)。
character_maximum_lengthcardinal_number如果data_type标识一种字符或位串类型,这里是声明的最大长度;如果没有声明最大长度或者所有其他数据类型,这里为空。
character_octet_lengthcardinal_number如果data_type标识一个字符类型,这里是一个数据的最大可能长度(以字节计);对其他所有数据类型为空。最大字节长度取决于声明的字符最大长度(见上文)和服务器编码。
numeric_precisioncardinal_number如果data_type标识一种数字类型,这列包含这个属性类型的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。
numeric_precision_radixcardinal_number如果data_type标识一种数字类型,这一列指示numeric_precisionnumeric_scale列中的值是基于什么来表示。该值为 2 或 10。对于所有其他数据类型,这一列为空。
numeric_scalecardinal_number如果data_type标识一种准确数字类型,这列包含这个属性类型的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。
datetime_precisioncardinal_number如果data_type标识一种日期、时间、时间戳或时间间隔类型,这一列包含这个属性类型的(声明的或隐式的)分数秒的精度,也就是秒值的小数点后的十进制位数。对于所有其他数据类型,这一列为空。
interval_typecharacter_data如果data_type标识一种时间间隔类型,这一列包含时间间隔为这个属性包括哪些域的声明,例如YEAR TO MONTHDAY TO SECOND等等。如果没有指定域限制(也就是该时间间隔接受所有域),并且对于所有其他数据类型,这个域为空。
interval_precisioncardinal_number应用于一个PostgreSQL中不可用的特性(关于时间间隔类型属性的分数秒精度可见datetime_precision
character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
collation_catalogsql_identifier包含此属性排序规则的数据库名(总是当前数据库),如果默认或者该属性的数据类型不可排序则为空
collation_schemasql_identifier包含此属性排序规则的模式名,如果默认或者该属性的数据类型不可排序则为空
collation_namesql_identifier该属性排序规则的名称,如果默认或者该属性的数据类型不可排序则为空
domain_catalogsql_identifier如果该列有一个域类型,这里是该域所在的数据库名(总是当前数据库),否则为空。
domain_schemasql_identifier如果该列有一个域类型,这里是该域所在的模式名,否则为空。
domain_namesql_identifier如果该列有一个域类型,这里是该域的名称,否则为空。
udt_catalogsql_identifier该列数据类型(如果适用,底层的域类型)被定义的数据库名(总是当前数据库)
udt_schemasql_identifier该列数据类型(如果适用,底层的域类型)被定义的模式名
udt_namesql_identifier该列数据类型(如果适用,底层的域类型)的名称
scope_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
scope_schemasql_identifier应用于一个PostgreSQL中不可用的特性
scope_namesql_identifier应用于一个PostgreSQL中不可用的特性
maximum_cardinalitycardinal_number总是空,因为数组在PostgreSQL中总是有无限制的最大势
dtd_identifiersql_identifier该列的数据类型描述符的一个标识符,在从属于该表的数据类型标识符之中唯一。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。
is_self_referencingyes_or_no应用于一个PostgreSQL中不可用的特性
is_identityyes_or_no如果该列是一个标识列,则为YES,否则为NO
identity_generationcharacter_data如果该列是一个标识列,则为ALWAYS或者BY DEFAULT,它反映该列的定义。
identity_startcharacter_data如果该列是一个标识列,则是内部序列的起始值,否则为空。
identity_incrementcharacter_data如果该列是一个标识列,则是内部序列的增量,否则为空。
identity_maximumcharacter_data如果该列是一个标识列,则是内部序列的最大值,否则为空。
identity_minimumcharacter_data如果该列是一个标识列,则是内部序列的最小值,否则为空。
identity_cycleyes_or_no如果该列是一个标识列,则YESNO分别表示内部序列可循环和不可循环,否则为空。
is_generatedcharacter_data应用于一个PostgreSQL中不可用的特性
generation_expressioncharacter_data应用于一个PostgreSQL中不可用的特性
is_updatableyes_or_no如果该列是可更新的,则为YES,否则为NO(基表中的列总是可更新的,视图中的列则不一定)

因为在 SQL 中有多种方式定义数据类型,而PostgreSQL还包含额外的方式来定义数据类型,它们在信息模式中的表示可能有点困难。列data_type应该标识列的底层内建类型。在PostgreSQL中,这表示定义在系统目录模式pg_catalog中的类型。如果应用能够特别地(例如以不同方式格式化数字类型或使用精度列中的数据)处理总所周知的内建类型,这列可能会有用。列udt_nameudt_schemaudt_catalog总是标识列的底层数据类型,即使该列是基于一个域的(因为PostgreSQL对待内建类型和用户定义类型的方式是一样的,内建类型也出现在这里。这是 SQL 标准的一种扩展)。如果一个应用想要根据该类型以不同的方式处理数据,就应该使用这些列,因为在那种情况下即使该列真地基于一个域也没有关系。如果该列是基于一个域,该域的标识被存储在列domain_namedomain_schemadomain_catalog。如果你想要把列和它们相关的数据类型配对并且把域视作单独的类型,你可以写coalesce(domain_name, udt_name)等等。

十七、constraint_column_usage

        视图constraint_column_usage标识在当前数据库中被某个约束使用的所有列。只有包含在被一个当前启用的角色拥有的表中的那些列才被显示。对于一个检查约束,这个视图标识被用在该检查约束中的列。对于一个外键约束,这个视图标识外键引用的列。对于一个唯一或主键约束,这个视图标识被约束的列。

表 3.15. constraint_column_usage

名称数据类型描述
table_catalogsql_identifier包含被某个约束使用的列的表所在的数据库名(总是当前数据库)
table_schemasql_identifier包含被某个约束使用的列的表所在的模式名
table_namesql_identifier包含被某个约束使用的列的表名
column_namesql_identifier包含被某个约束使用的列名
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名

十八、constraint_table_usage

        视图constraint_table_usage标识在当前数据库中被某个约束使用的所有表(这与视图table_constraints不同,它标识哪些表约束定义在哪些表上)。对于一个外键约束,这个视图标识该外键引用的表。对于一个唯一或主键约束,这个视图仅标识该约束属于的表。检查约束和非空约束不被包括在这个视图中。

表 3.16. constraint_table_usage

名称数据类型描述
table_catalogsql_identifier包含被某个约束使用的表的数据库名(总是当前数据库)
table_schemasql_identifier包含被某个约束使用的表的模式名
table_namesql_identifier包含被某个约束使用的表名
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名

十九、data_type_privileges

        视图data_type_privileges标识当前用户能够访问(作为被描述对象的拥有者或者具有其上的某种特权)的所有数据类型描述符。只要一个数据类型被用在一个表列、一个域或一个函数(作为参数或返回类型)就会生成一个数据类型描述符并且在那个实例中存储一些有关该数据类型如何被使用的信息(例如,声明的最大长度,如果适用)。每一个数据类型描述符被赋予一个任意的标识符,它在被赋予给一个对象(表、域、函数)的数据类型描述符中唯一。这个视图对于应用可能没什么用,但是它被用于定义信息模式中的一些其他视图。

表 3.17. data_type_privileges

名称数据类型描述
object_catalogsql_identifier包含该被描述对象的数据库名(总是当前数据库)
object_schemasql_identifier包含该被描述对象的模式名
object_namesql_identifier该描述对象的名字
object_typecharacter_data被描述对象的类型:TABLE(从属于表的一列的数据类型描述符)、DOMAIN (从属于域的数据类型描述符)、ROUTINE(从属于函数的一个参数或返回数据类型的数据类型描述符)。
dtd_identifiersql_identifier数据类型描述符的标识符,它在同一对象的数据类型描述符之间唯一。

二十、domain_constraints

        视图domain_constraints包含所有属于当前数据库中定义的域的约束。只有当前用户能访问的那些域才被显示(作为拥有者或具有某些特权)。

表 3.18. domain_constraints

名称数据类型描述
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名
domain_catalogsql_identifier包含该域的数据库名(总是当前数据库)
domain_schemasql_identifier包含该域的模式名
domain_namesql_identifier该域的名称
is_deferrableyes_or_no如果该约束是可延迟的,则为YES,否则为NO
initially_deferredyes_or_no如果该约束是可延迟的且初始就被延迟,则为YES,否则为NO

二十一、domain_udt_usage

        视图domain_udt_usage标识所有基于被一个当前启用的角色拥有的数据类型的域。注意在PostgreSQL中,内建数据类型的行为相似于用户定义的类型,因此它们也被包括在这里。

表 3.19. domain_udt_usage

名称数据类型描述
udt_catalogsql_identifier该域数据类型被定义的数据库名(总是当前数据库)
udt_schemasql_identifier该域数据类型被定义的模式名
udt_namesql_identifier该域数据类型的名称
domain_catalogsql_identifier包含该域的数据库名(总是当前数据库)
domain_schemasql_identifier包含该域的模式名
domain_namesql_identifier该域的名称

二十二、domains

        视图domains包含定义在当前数据库中的所有域。只有当前用户能够访问(作为拥有者或具有某些特权)的域才被显示。

表 37.20. domains

名称数据类型描述
domain_catalogsql_identifier包含该域的数据库名(总是当前数据库)
domain_schemasql_identifier包含该域的模式名
domain_namesql_identifier该域的名称
data_typecharacter_data该域的数据类型如果是一种内建类型,这里是该域的数据类型;如果是某种数组(此种情况见视图element_types),则为ARRAY;否则为USER-DEFINED(此种情况中,该类型被标识在udt_name和相关列中)。
character_maximum_lengthcardinal_number如果该域有一个字符或位串类型,这里是声明的最大长度;如果没有声明最大长度,则对于所有其他数据类型为空。
character_octet_lengthcardinal_number如果该域有一个字符类型,这里是一个数据的最大可能长度(以字节计);对其他所有数据类型为空。最大字节长度取决于声明的字符最大长度(见上文)和服务器编码。
character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
collation_catalogsql_identifier包含此域排序规则的数据库名(总是当前数据库),如果默认或者该域的数据类型不可排序则为空
collation_schemasql_identifier包含此域排序规则的模式名,如果默认或者该域的数据类型不可排序则为空
collation_namesql_identifier该域排序规则的名称,如果默认或者该域的数据类型不可排序则为空
numeric_precisioncardinal_number如果该域有一种数字类型,这列包含这个域类型的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。
numeric_precision_radixcardinal_number如果该域有一种数字类型,这一列指示numeric_precisionnumeric_scale列中的值是基于什么来表示。该值为 2 或 10。对于所有其他数据类型,这一列为空。
numeric_scalecardinal_number如果该域有一种准确数字类型,这列包含这个域类型的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。对于所有其他数据类型,这一列为空。
datetime_precisioncardinal_number如果data_type标识一种日期、时间、时间戳或时间间隔类型,这一列包含这个域类型的(声明的或隐式的)分数秒的精度,也就是秒值的小数点后的十进制位数。对于所有其他数据类型,这一列为空。
interval_typecharacter_data如果data_type标识一种时间间隔类型,这一列包含时间间隔为这个域包括哪些域的声明,例如YEAR TO MONTHDAY TO SECOND等等。如果没有指定域限制(也就是该时间间隔接受所有域),并且对于所有其他数据类型,这个域为空。
interval_precisioncardinal_number应用于一个PostgreSQL中不可用的特性(关于时间间隔类型域的分数秒精度可见datetime_precision
domain_defaultcharacter_data该域的默认表达式
udt_catalogsql_identifier该域数据类型被定义的数据库名(总是当前数据库)
udt_schemasql_identifier该域数据类型被定义的模式名
udt_namesql_identifier该域数据类型的名称
scope_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
scope_schemasql_identifier应用于一个PostgreSQL中不可用的特性
scope_namesql_identifier应用于一个PostgreSQL中不可用的特性
maximum_cardinalitycardinal_number总是空,因为数组在PostgreSQL中总是有无限制的最大势
dtd_identifiersql_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 e
     ON ((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_catalogsql_identifier包含使用被描述的数组的对象的数据库名(总是当前数据库)
object_schemasql_identifier包含使用被描述的数组的对象的模式名
object_namesql_identifier使用被描述的模式的对象名
object_typecharacter_data使用被描述的数组的对象的类型:TABLE(被一个表列使用的数组)、USER-DEFINED TYPE(被组合类型的一个属性使用的数组)、DOMAIN (被域使用的数组)、ROUTINE(被函数的一个参数或返回数据类型使用的数组)。
collection_type_identifiersql_identifier被描述的数组的数据类型描述符的标识符。使用这个去与其他信息模式视图的dtd_identifier列连接。
data_typecharacter_data如果数组元素的数据类型是内建类型,这里是数组元素的数据类型,否则为USER-DEFINED(在那种情况下,该类型被标识在udt_name和相关列中)。
character_maximum_lengthcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
character_octet_lengthcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
collation_catalogsql_identifier包含元素类型排序规则的数据库名(总是当前数据库), 如果默认或该元素的数据类型是不可排序的则为空
collation_schemasql_identifier包含元素类型排序规则的模式名, 如果默认或该元素的数据类型是不可排序的则为空
collation_namesql_identifier元素类型的排序规则名, 如果默认或该元素的数据类型是不可排序的则为空
numeric_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
numeric_precision_radixcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
numeric_scalecardinal_number总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
datetime_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
interval_typecharacter_data总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
interval_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的数组元素数据类型
domain_defaultcharacter_data还未被实现
udt_catalogsql_identifier元素的数据类型所在的数据库名(总是当前数据库)
udt_schemasql_identifier元素的数据类型所在的模式名
udt_namesql_identifier模式的数据类型名
scope_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
scope_schemasql_identifier应用于一个PostgreSQL中不可用的特性
scope_namesql_identifier应用于一个PostgreSQL中不可用的特性
maximum_cardinalitycardinal_number总是空,因为数组在PostgreSQL中总是有无限制的最大势
dtd_identifiersql_identifier该元素的数据类型描述符的标识符。当前无用。

二十四、enabled_roles

        视图enabled_roles标识当前“已被启用的角色”。已被启用的角色被递归地定义为:当前用户以及被授予给具有自动继承的已被启用角色的所有角色。换句话说,就是当前用户是其直接或间接成员的所有角色。

为了权限检查,“可应用角色”的集合被应用,它会比已被启用角色的集合包含的角色范围更宽。因此通常使用视图applicable_roles要更好,applicable_roles视图的详情请见第五节

表 3.22. enabled_roles

名称数据类型描述
role_namesql_identifier角色名称

二十五、foreign_data_wrapper_options

        视图foreign_data_wrapper_options包含为当前数据库中外部数据包装器定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部数据包装器被显示。

表 3.23. foreign_data_wrapper_options

名称数据类型描述
foreign_data_wrapper_catalogsql_identifier该外部数据包装器所在的数据库名(总是当前数据库)
foreign_data_wrapper_namesql_identifier该外部数据包装器的名字
option_namesql_identifier一个选项名
option_valuecharacter_data该选项的值

二十六、foreign_data_wrappers

        视图foreign_data_wrappers包含定义在当前数据库中的所有外部数据包装器。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部数据包装器才会被显示。

表 3.24. foreign_data_wrappers

名称数据类型描述
foreign_data_wrapper_catalogsql_identifier包含该外部数据包装器的数据库名(总是当前数据库)
foreign_data_wrapper_namesql_identifier外部数据包装器的名字
authorization_identifiersql_identifier外部服务器拥有者的名字
library_namecharacter_data实现这个外部数据包装器的库文件名
foreign_data_wrapper_languagecharacter_data用于实现这个外部数据包装器的语言

二十七、foreign_server_options

        视图foreign_server_options包含为当前数据库中外部服务器定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部服务器才会被显示。

表 3.25. foreign_server_options

名称数据类型描述
foreign_server_catalogsql_identifier该外部服务器所在的数据库名(总是当前数据库)
foreign_server_namesql_identifier该外部服务器的名字
option_namesql_identifier一个选项名
option_valuecharacter_data该选项的值

二十八、foreign_servers

        视图foreign_servers包含当前数据库中定义的所有外部服务器。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部服务器才会被显示。

表 3.26. foreign_servers

名称数据类型描述
foreign_server_catalogsql_identifier该外部服务器所在的数据库名(总是当前数据库)
foreign_server_namesql_identifier该外部服务器的名字
foreign_data_wrapper_catalogsql_identifier包含被该外部服务器使用的外部数据包装器的数据库名(总是当前数据库)
foreign_data_wrapper_namesql_identifier被该外部服务器所使用的外部数据包装器的名字
foreign_server_typecharacter_data外部服务器类型信息(如果在创建时指定过)
foreign_server_versioncharacter_data外部服务器版本信息(如果在创建时指定过)
authorization_identifiersql_identifier该外部服务器的拥有者名字

二十九、foreign_table_options

        视图foreign_table_options包含为当前数据库中外部表定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部表才会被显示。

表 3.27. foreign_table_options

名称数据类型描述
foreign_table_catalogsql_identifier包含该外部表的数据库名(总是当前数据库)
foreign_table_schemasql_identifier包含该外部表的模式名
foreign_table_namesql_identifier外部表的名字
option_namesql_identifier一个选项名
option_valuecharacter_data该选项的值

三十、foreign_tables

        视图foreign_tables包含定义在当前数据库中的所有外部表。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部表才会被显示。

表 3.28. foreign_tables

名称数据类型描述
foreign_table_catalogsql_identifier该外部表所在的数据库名(总是当前数据库)
foreign_table_schemasql_identifier包含该外部表的模式名
foreign_table_namesql_identifier该外部表的名字
foreign_server_catalogsql_identifier该外部服务器所在的数据库名(总是当前数据库)
foreign_server_namesql_identifier该外部服务器的名字

三十一、key_column_usage

        视图key_column_usage标识当前数据库中所有被某种唯一、主键或外键约束限制的列。检查约束不被包括在这个视图中。只有那些当前用户能够访问的列才会被显示(作为拥有者或具有某些特权)。

表 3.29. key_column_usage

名称数据类型描述
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名
table_catalogsql_identifier包含被这个约束限制的列的表所在的数据库名(总是当前数据库)
table_schemasql_identifier包含被这个约束限制的列的表所在的模式名
table_namesql_identifier包含被这个约束限制的列的表的名字
column_namesql_identifier被这个约束限制的列名
ordinal_positioncardinal_number该列在约束键中的顺序位置(从 1 开始计数)
position_in_unique_constraintcardinal_number对于一个外键约束,被引用行在其唯一约束中的顺序位置(从 1 开始计数);对于其他约束为空

三十二、parameters

        视图parameters包含当前数据库中所有函数的参数的有关信息。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数才会被显示。

表 3.30. parameters

名称数据类型描述
specific_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
specific_schemasql_identifier包含该函数的模式名
specific_namesql_identifier该函数的“专用名”。详见第四十节
ordinal_positioncardinal_number该参数在函数参数列表中的顺序位置(从 1 开始计数)
parameter_modecharacter_dataIN表示输入参数, OUT表示输出参数, INOUT表示输入输出参数。
is_resultyes_or_no应用于一个PostgreSQL中不可用的特性
as_locatoryes_or_no应用于一个PostgreSQL中不可用的特性
parameter_namesql_identifier参数名,如果参数没有名称则为空
data_typecharacter_data该参数的数据类型如果是一种内建类型,这里是该参数的数据类型;如果是某种数组(此种情况见视图element_types),则为ARRAY;否则为USER-DEFINED(此种情况中,该类型被标识在udt_name和相关列中)。
character_maximum_lengthcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
character_octet_lengthcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
collation_catalogsql_identifier总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
collation_schemasql_identifier总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
collation_namesql_identifier总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
numeric_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
numeric_precision_radixcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
numeric_scalecardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
datetime_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
interval_typecharacter_data总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
interval_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
udt_catalogsql_identifier该参数的数据类型所在的数据库名(总是当前数据库)
udt_schemasql_identifier该参数的数据类型所在的模式名
udt_namesql_identifier该参数的数据类型的名字
scope_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
scope_schemasql_identifier应用于一个PostgreSQL中不可用的特性
scope_namesql_identifier应用于一个PostgreSQL中不可用的特性
maximum_cardinalitycardinal_number总是空,因为数组在PostgreSQL中总是有无限制的最大势
dtd_identifiersql_identifier该参数的数据类型描述符的一个标识符,在从属于该函数的数据类型标识符之中唯一(这不重要,因为一个域只包含一个数据类型描述符)。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。
parameter_defaultcharacter_data该参数的默认表达式,如果没有或者该函数不被一个当前启用的角色拥有则为空值。

三十三、referential_constraints

        视图referential_constraints包含当前数据库中的所有引用(外键)约束。只有那些当前用户具有其引用表上写权限(作为拥有者或具有某些除SELECT之外的特权)的约束才会被显示。

表 3.31. referential_constraints

名称数据类型描述
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名
unique_constraint_catalogsql_identifier包含该外键约束所引用的唯一或主键约束的数据库名(总是当前数据库)
unique_constraint_schemasql_identifier包含该外键约束所引用的唯一或主键约束的模式名
unique_constraint_namesql_identifier包含该外键约束所引用的唯一或主键约束的名字
match_optioncharacter_data外键约束的匹配选项: FULLPARTIALNONE
update_rulecharacter_data外键约束的更新规则: CASCADESET NULL、 SET DEFAULTRESTRICT或 NO ACTION
delete_rulecharacter_data外键约束的删除规则: CASCADESET NULL、 SET DEFAULTRESTRICT或 NO ACTION

三十四、role_column_grants

        视图role_column_grants标识所有在列上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在column_privileges中找到。这个视图和column_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的列。

表 3.32. role_column_grants

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
table_catalogsql_identifier包含该列的表所在的数据库名(总是当前数据库)
table_schemasql_identifier包含该列的表所在的模式名
table_namesql_identifier包含该列的表名
column_namesql_identifier列名称
privilege_typecharacter_data特权类型:SELECT、 INSERTUPDATE或 REFERENCES
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO

三十五、role_routine_grants

        视图role_routine_grants标识所有在函数上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在routine_privileges中找到。这个视图和routine_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的函数。

表 3.33. role_routine_grants

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
specific_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
specific_schemasql_identifier包含该函数的模式名
specific_namesql_identifier该函数的“专用名”。详见第四十节
routine_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
routine_schemasql_identifier包含该函数的模式名
routine_namesql_identifier该函数的名字(在重载的情况下可能会重复)
privilege_typecharacter_data总是为EXECUTE(函数唯一的特权类型)
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO

三十六、role_table_grants

        视图role_table_grants标识所有在表或视图上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在table_privileges中找到。这个视图和table_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的表。

表 3.34. role_table_grants

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
table_catalogsql_identifier包含该表的数据库名(总是当前数据库)
table_schemasql_identifier包含该表的模式名
table_namesql_identifier表名称
privilege_typecharacter_data该特权的类型:SELECT、 INSERTUPDATE、 DELETETRUNCATE、 REFERENCESTRIGGER
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO
with_hierarchyyes_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

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
udt_catalogsql_identifier包含该类型的数据库名(总是当前数据库)
udt_schemasql_identifier包含该类型的模式名
udt_namesql_identifier该类型的名字
privilege_typecharacter_data总是TYPE USAGE
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO

三十八、role_usage_grants

        视图role_usage_grants标识所有在多种对象上授予的USAGE特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在usage_privileges中找到。这个视图和usage_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的对象。

表 3.36. role_usage_grants

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
object_catalogsql_identifier包含该对象的数据库名(总是当前数据库)
object_schemasql_identifier如果适用,则为包含该对象的模式名,否则为一个空字符串
object_namesql_identifier对象的名字
object_typecharacter_dataCOLLATIONDOMAINFOREIGN DATA WRAPPERFOREIGN SERVERSEQUENCE
privilege_typecharacter_data总是USAGE
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO

三十九、routine_privileges

        视图routine_privileges标识所有在函数上授予的特权,其授予者或被授予者是一个当前已被启用的角色。对于每一种函数、授予者和被授予者的组合,这里都有一行。

表 3.37. routine_privileges

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
specific_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
specific_schemasql_identifier包含该函数的模式名
specific_namesql_identifier该函数的“专用名”。详见第四十节
routine_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
routine_schemasql_identifier包含该函数的模式名
routine_namesql_identifier该函数的名字(在重载的情况下可能重复)
privilege_typecharacter_data总是EXECUTE(函数唯一的特权类型)
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO

四十、routines

        视图routines包含当前数据库中所有的函数和过程。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数和过程才会被显示。

表 3.38. routines

名称数据类型描述
specific_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
specific_schemasql_identifier包含该函数的模式名
specific_namesql_identifier该函数的“专用名”。这是一个在模式中唯一标识该函数的名称,即使该函数真正的名称已经被重载。专用名的格式尚未被定义,它应当仅被用来与指定例程名称的其他实例进行比较。
routine_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
routine_schemasql_identifier包含该函数的模式名
routine_namesql_identifier该函数的名字(在重载的情况下可能重复)
routine_typecharacter_dataFUNCTION表示是一个函数,PROCEDURE表示是一个过程
module_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
module_schemasql_identifier应用于一个PostgreSQL中不可用的特性
module_namesql_identifier应用于一个PostgreSQL中不可用的特性
udt_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
udt_schemasql_identifier应用于一个PostgreSQL中不可用的特性
udt_namesql_identifier应用于一个PostgreSQL中不可用的特性
data_typecharacter_data该函数的返回数据类型如果是一种内建类型,这里是该数据类型;如果是某种数组(此种情况见视图element_types),则为ARRAY;否则为USER-DEFINED(此种情况中,该类型被标识在type_udt_name和相关列中)。如果是过程则此项为空。
character_maximum_lengthcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
character_octet_lengthcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
collation_catalogsql_identifier总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
collation_schemasql_identifier总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
collation_namesql_identifier总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
numeric_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
numeric_precision_radixcardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
numeric_scalecardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
datetime_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
interval_typecharacter_data总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
interval_precisioncardinal_number总是为空,因为这种信息不适用于PostgreSQL中的返回数据类型
type_udt_catalogsql_identifier该函数的返回数据类型所在的数据库名(总是当前数据库)。如果是过程则此项为空。
type_udt_schemasql_identifier该函数的返回数据类型所在的模式名。如果是过程则此项为空。
type_udt_namesql_identifier该函数的返回数据类型的名字。如果是过程则此项为空。
scope_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
scope_schemasql_identifier应用于一个PostgreSQL中不可用的特性
scope_namesql_identifier应用于一个PostgreSQL中不可用的特性
maximum_cardinalitycardinal_number总是空,因为数组在PostgreSQL中总是有无限制的最大势
dtd_identifiersql_identifier该函数返回数据类型的数据类型描述符的一个标识符,在从属于该函数的数据类型标识符之中唯一。这主要用于与这类标识符的其他实例进行连接(该标识符的指定格式没有被定义并且不保证在未来的版本中保持相同)。
routine_bodycharacter_data如果该函数是一个 SQL 函数,则为SQL,否则为EXTERNAL
routine_definitioncharacter_data该函数的源文本(如果该函数不属于一个当前已被启用的角色,则为空)。(根据 SQL 标准,只有routine_bodySQL时这一列才适用。但是在PostgreSQL中,它将会包含该函数被创建时所指定的任何源文本。)
external_namecharacter_data如果这个函数是一个 C 函数,则为该函数的外部名称(链接符号),否则为空(这会产生和显示在routine_definition中相同的值)。
external_languagecharacter_data该函数所用的语言
parameter_stylecharacter_data总是GENERAL(SQL 标准定义了其他参数风格,但在PostgreSQL中不可用)
is_deterministicyes_or_no如果该函数被声明为不变(在 SQL 标准中被称为确定性的),则为YES,否则为NO(你不能通过该信息模式查询在PostgreSQL中可用的其他易变级别)。
sql_data_accesscharacter_data总是MODIFIES,表示该函数可能修改 SQL 数据。这种信息对PostgreSQL没有用处。
is_null_callyes_or_no如果该函数在任一参数为空时自动返回空值,则为YES,否则为NO。如果是过程则此项为空。
sql_pathcharacter_data应用于一个PostgreSQL中不可用的特性
schema_level_routineyes_or_no总是YES(反例是一个用户定义类型的方法,这是在PostgreSQL不可用的一种特性)。
max_dynamic_result_setscardinal_number应用于一个PostgreSQL中不可用的特性
is_user_defined_castyes_or_no应用于一个PostgreSQL中不可用的特性
is_implicitly_invocableyes_or_no应用于一个PostgreSQL中不可用的特性
security_typecharacter_data如果该函数以当前用户的特权运行,则为INVOKER;如果该函数以定义它的用户的特权运行,则为DEFINER
to_sql_specific_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
to_sql_specific_schemasql_identifier应用于一个PostgreSQL中不可用的特性
to_sql_specific_namesql_identifier应用于一个PostgreSQL中不可用的特性
as_locatoryes_or_no应用于一个PostgreSQL中不可用的特性
createdtime_stamp应用于一个PostgreSQL中不可用的特性
last_alteredtime_stamp应用于一个PostgreSQL中不可用的特性
new_savepoint_levelyes_or_no应用于一个PostgreSQL中不可用的特性
is_udt_dependentyes_or_no当前总是NO。另一个选项YES应用于一个PostgreSQL中不可用的特性。
result_cast_from_data_typecharacter_data应用于一个PostgreSQL中不可用的特性
result_cast_as_locatoryes_or_no应用于一个PostgreSQL中不可用的特性
result_cast_char_max_lengthcardinal_number应用于一个PostgreSQL中不可用的特性
result_cast_char_octet_lengthcharacter_data应用于一个PostgreSQL中不可用的特性
result_cast_char_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_char_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_char_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_collation_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_collation_schemasql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_collation_namesql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_numeric_precisioncardinal_number应用于一个PostgreSQL中不可用的特性
result_cast_numeric_precision_radixcardinal_number应用于一个PostgreSQL中不可用的特性
result_cast_numeric_scalecardinal_number应用于一个PostgreSQL中不可用的特性
result_cast_datetime_precisioncharacter_data应用于一个PostgreSQL中不可用的特性
result_cast_interval_typecharacter_data应用于一个PostgreSQL中不可用的特性
result_cast_interval_precisioncardinal_number应用于一个PostgreSQL中不可用的特性
result_cast_type_udt_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_type_udt_schemasql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_type_udt_namesql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_scope_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_scope_schemasql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_scope_namesql_identifier应用于一个PostgreSQL中不可用的特性
result_cast_maximum_cardinalitycardinal_number应用于一个PostgreSQL中不可用的特性
result_cast_dtd_identifiersql_identifier应用于一个PostgreSQL中不可用的特性

四十一、schemata

        视图schemata包含当前数据库中被当前用户(作为属主或具有某些特权)可访问的所有模式。

表 3.39. schemata

名称数据类型描述
catalog_namesql_identifier该模式所在的数据库名(总是当前数据库)
schema_namesql_identifier该模式的名称
schema_ownersql_identifier该模式拥有者的名称
default_character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
default_character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
default_character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
sql_pathcharacter_data应用于一个PostgreSQL中不可用的特性

四十二、sequences

        视图sequences包含所有定义在当前数据库中的序列。只有那些当前用户能够访问(作为拥有者或具有某些特权)的序列才会被显示。

表 3.40. sequences

名称数据类型描述
sequence_catalogsql_identifier包含该序列的数据库名(总是当前数据库)
sequence_schemasql_identifier包含该序列的模式名
sequence_namesql_identifier该序列的名字
data_typecharacter_data该序列的数据类型。
numeric_precisioncardinal_number这列包含这个序列数据类型(见上文)的(声明的或隐式的)精度。精度指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。
numeric_precision_radixcardinal_number这一列指示numeric_precisionnumeric_scale列中的值是基于什么来表示。该值为 2 或 10。
numeric_scalecardinal_number这列包含这个序列数据类型(见上文)的(声明的或隐式的)比例。比例指示了有效位数。它可以按照列numeric_precision_radix中指定的被表示为十进制(基于 10)或二进制(基于 2)。
start_valuecharacter_data该序列的开始值
minimum_valuecharacter_data该序列的最小值
maximum_valuecharacter_data该序列的最大值
incrementcharacter_data该序列的增量
cycle_optionyes_or_no如果该序列会循环,则为YES,否则为NO

注意依照 SQL 标准,开始值、最小值、最大值和增量值被作为字符串返回。

四十三、sql_features

        表sql_features包含的信息指示了哪些 SQL 标准中定义的正式特性被PostgreSQL所支持。这里你也能找到一些额外的背景信息。

表 3.41. sql_features

名称数据类型描述
feature_idcharacter_data该特性的标识符字符串
feature_namecharacter_data该特性的描述性名称
sub_feature_idcharacter_data该子特性的标识符字符串,或者如果不是一个子特性则为一个长度为零的字符串
sub_feature_namecharacter_data该子特性的描述性名称,或者如果不是一个子特性则为一个长度为零的字符串
is_supportedyes_or_no如果该特性被当前版本的PostgreSQL完全支持,则为YES,否则为NO
is_verified_bycharacter_data总是为空,因为PostgreSQL开发组没有对特性的一致性执行正式的测试
commentscharacter_data可能会是关于该特性被支持状态的一段注释

四十四、sql_implementation_info

        sql_implementation_info包含的信息指示剩下的由 SQL 标准实现定义的多个方面。这类信息主要用来在 ODBC 接口的情境中使用;其它接口的用户可能将发现这类信息用处不大。由于这个原因,个体实现信息项没有在这里描述,你将会在 ODBC 接口的描述中找到它们。

表 3.42. sql_implementation_info

名称数据类型描述
implementation_info_idcharacter_data该实现信息项的标识符字符串
implementation_info_namecharacter_data该实现信息项的描述性名称
integer_valuecardinal_number该实现信息项的值,如果该值被包含在character_value列中则为空
character_valuecharacter_data该实现信息项的值,如果该值被包含在integer_value列中则为空
commentscharacter_data可能是从属于该实现信息项的一段注释

四十五、sql_languages

        sql_languages为每一种被PostgreSQL支持的 SQL 语言绑定包含一行。PostgreSQL支持在 C 中的直接 SQL 和嵌入式 SQL,这是你从这张表中知道的所有东西。

这个表在 SQL:2008 中已被从 SQL 标准中移除,因此这里没有项引用 SQL:2003 之后的标准。

表 3.43. sql_languages

名称数据类型描述
sql_language_sourcecharacter_data该语言定义的源名称,总是ISO 9075,即 SQL 标准
sql_language_yearcharacter_datasql_language_source中引用的标准被通过的年份。
sql_language_conformancecharacter_data该语言绑定的标准一致性级别。对于 ISO 9075:2003 总是CORE
sql_language_integritycharacter_data总是为空(这个值与一个早期版本的 SQL 标准相关)。
sql_language_implementationcharacter_data总是为空
sql_language_binding_stylecharacter_data语言绑定风格,为DIRECTEMBEDDED
sql_language_programming_languagecharacter_data如果绑定风格为EMBEDDED,则为编程语言,否则为空。PostgreSQL仅支持 C 语言。

四十六、sql_packages

        sql_packages包含的信息指示哪些定义在 SQL 标准中的特性包被PostgreSQL支持。

表 3.44. sql_packages

名称数据类型描述
feature_idcharacter_data该包的标识符字符串
feature_namecharacter_data该包的描述性名称
is_supportedyes_or_no如果该包被当前版本的PostgreSQL支持,则为YES,否则为NO
is_verified_bycharacter_data总是为空,因为PostgreSQL开发组没有对特性的一致性执行正式的测试
commentscharacter_data可能会是关于该包被支持状态的一段注释

四十七、sql_parts

        sql_parts包含的信息指示哪些定义在 SQL 标准中的部分被PostgreSQL支持。

表 3.45. sql_parts

名称数据类型描述
feature_idcharacter_data包含该部分编号的一个标识符字符串
feature_namecharacter_data该部分的描述性名称
is_supportedyes_or_no如果当前版本的PostgreSQL完全支持该部分,则为YES,否则为NO
is_verified_bycharacter_data总是为空,因为PostgreSQL开发组没有对特性的一致性执行正式的测试
commentscharacter_data可能会是关于该部分被支持状态的一段注释

四十八、sql_sizing

        sql_sizing包含有关PostgreSQL中多种尺寸限制和最大值的信息。这类信息主要用来在 ODBC 接口的情境中使用;其它接口的用户可能将发现这类信息用处不大。由于这个原因,个体实现信息项没有在这里描述,你将会在 ODBC 接口的描述中找到它们。

表 3.46. sql_sizing

名称数据类型描述
sizing_idcardinal_number该尺寸项的标识符
sizing_namecharacter_data该尺寸项的描述性名称
supported_valuecardinal_number尺寸项的值,如果尺寸是不受限制或不能确定的则为 0,如果尺寸项适用的特性不受支持则为空
commentscharacter_data可能是从属于尺寸项的一段注释

四十九、sql_sizing_profiles

        表sql_sizing_profiles包含有关 SQL 标准的多种 profile 所需的sql_sizing值的信息。PostgreSQL不追踪任何 SQL profile,因此这个表为空。

表 3.47. sql_sizing_profiles

名称数据类型描述
sizing_idcardinal_number该尺寸项的标识符
sizing_namecharacter_data该尺寸项的描述性名称
profile_idcharacter_data一个 profile 的标识符字符串
required_valuecardinal_number该 SQL profile 对尺寸项所要求的值,如果该 profile 对尺寸项没有限制则为 0,如果该 profile 不要求该尺寸项所适用的任何特性则为空
commentscharacter_data可能是从属于该 profile 中尺寸项的一段注释

五十、table_constraints

        视图table_constraints包含属于特定表的所有约束,这些表要满足的条件是:当前用户拥有表或者是当前用户在表上具有某种除SELECT之外的特权。

表 3.48. table_constraints

名称数据类型描述
constraint_catalogsql_identifier包含该约束的数据库名(总是当前数据库)
constraint_schemasql_identifier包含该约束的模式名
constraint_namesql_identifier约束名
table_catalogsql_identifier包含该表的数据库名(总是当前数据库)
table_schemasql_identifier包含该表的模式名
table_namesql_identifier表名称
constraint_typecharacter_data该约束的类型:CHECK、 FOREIGN KEYPRIMARY KEYUNIQUE
is_deferrableyes_or_no如果该约束是可延迟的,则为YES,否则为NO
initially_deferredyes_or_no如果该约束是可延迟的并且是初始已被延迟,则为YES,否则为NO
enforcedyes_or_no适用于一种PostgreSQL中不可用的特性(当前总是YES

五十一、table_privileges

        视图table_privileges标识在表或视图上所有被授予的特权,这些特权必须是被一个当前已被启用角色授出或者被授予给一个当前已被启用角色。对每一个表、授予者和被授予者的组合都有一行。

表 3.49. table_privileges

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
table_catalogsql_identifier包含该表的数据库名(总是当前数据库)
table_schemasql_identifier包含该表的模式名
table_namesql_identifier表名称
privilege_typecharacter_data特权类型:SELECT、 INSERTUPDATE、 DELETETRUNCATE、 REFERENCESTRIGGER
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO
with_hierarchyyes_or_no在 SQL 标准中,WITH HIERARCHY OPTION是一个独立的(子)特权,它允许在表继承层级上的特定操作。在 PostgreSQL 中,这被包括在SELECT特权中,因此这一列在特权为SELECT时显示YES,其他时候显示NO

五十二、tables

        视图tables包含定义在当前数据库中的所有表和视图。只有那些当前用户能够访问(作为拥有者或具有某些特权)的表和视图才会被显示。

表 37.50. tables

名称数据类型描述
table_catalogsql_identifier包含该表的数据库名(总是当前数据库)
table_schemasql_identifier包含该表的模式名
table_namesql_identifier表名称
table_typecharacter_data该表的类型:BASE TABLE表示一个持久的基本表(常见表类型),VIEW表示一个视图,FOREIGN表示一个外部表,LOCAL TEMPORARY表示一个临时表
self_referencing_column_namesql_identifier应用于一个PostgreSQL中不可用的特性
reference_generationcharacter_data应用于一个PostgreSQL中不可用的特性
user_defined_type_catalogsql_identifier如果该表是一个有类型的表,则是包含其底层数据类型的数据库名(总是当前数据库),否则为空。
user_defined_type_schemasql_identifier如果该表是一个有类型的表,则是包含其底层数据类型的模式名,否则为空。
user_defined_type_namesql_identifier如果该表是一个有类型的表,则是其底层数据类型的名称,否则为空。
is_insertable_intoyes_or_no如果该表能够被插入,则为YES,否则为NO(基本表总是能被插入,而视图则不一定)。
is_typedyes_or_no如果该表是一个有类型的表,则为YES,否则为NO
commit_actioncharacter_data还未被实现

五十三、transforms

        视图transforms包含定义在当前数据库中的转换的信息。更准确 来说, 包含在转换中的每一个函数(“FROM SQL”或者 “TO SQL”函数)在其中都有一行。

表 3.51. transforms 列

名称数据类型描述
udt_catalogsql_identifier包含该转换所适用类型的数据库的名称(总是当前数据库)
udt_schemasql_identifier包含该转换所适用类型的模式的名称
udt_namesql_identifier该转换所适用类型的名称
specific_catalogsql_identifier包含该函数的数据库的名称(总是当前数据库)
specific_schemasql_identifier包含该函数的模式的名称
specific_namesql_identifier该函数的“专用名”。更多信息请见第 37.40 节
group_namesql_identifierSQL 标准允许在“组”中定义转换,并且在运行时选择一个 组。PostgreSQL 不支持这种做法,转换是与一种语言相关的。作为一种折衷, 这个域包含该转换所适用的语言。
transform_typecharacter_dataFROM SQL或者TO SQL

五十四、triggered_update_columns

        对于当前数据库中指定一个列列表(如UPDATE OF column1, column2)的触发器,视图triggered_update_columns标识这些列。没有指定一个列列表的触发器不被包括在这个视图中。只有那些当前用户拥有或具有某种除SELECT之外特权的列才会被显示。

表 3.52. triggered_update_columns

名称数据类型描述
trigger_catalogsql_identifier包含该触发器的数据库名(总是当前数据库)
trigger_schemasql_identifier包含该触发器的模式名
trigger_namesql_identifier该触发器的名称
event_object_catalogsql_identifier包含触发器所在的表的数据库名(总是当前数据库)
event_object_schemasql_identifier包含触发器所在的表的模式名
event_object_tablesql_identifier触发器所在的表的名称
event_object_columnsql_identifier触发器所在的列的名称

五十五、triggers

        视图triggers包含所有定义在当前数据库中表和视图上的触发器,并且只显示当前用户拥有的触发器或者是当前用户在其上具有某种除SELECT之外特权的触发器。

表 3.53. triggers

名称数据类型描述
trigger_catalogsql_identifier包含该触发器的数据库名(总是当前数据库)
trigger_schemasql_identifier包含该触发器的模式名
trigger_namesql_identifier该触发器的名称
event_manipulationcharacter_data触发该触发器的事件(INSERT、 UPDATEDELETE
event_object_catalogsql_identifier包含触发器所在的表的数据库名(总是当前数据库)
event_object_schemasql_identifier包含该触发器所在的表的模式名
event_object_tablesql_identifier该触发器所在的表的名称
action_ordercardinal_number同一个表上具有相同event_manipulationaction_timingaction_orientation的触发器之间的触发顺序。在PostgreSQL中,触发器按照名称顺序被触发,因此这一列会反映这种规则。
action_conditioncharacter_data触发器的WHEN条件,如果没有则为空(如果该表不被一个当前已启用角色拥有也是为空)
action_statementcharacter_data该触发器执行的语句(当前总是 EXECUTE FUNCTION function(...)
action_orientationcharacter_data标识触发器是对每个被处理的行触发一次还是为每个语句触发一次(ROWSTATEMENT
action_timingcharacter_data触发器在什么时候触发(BEFORE、 AFTERINSTEAD OF
action_reference_old_tablesql_identifier“旧”传递表的名称,如果没有则为空
action_reference_new_tablesql_identifier“新”传递表的名称,如果没有则为空
action_reference_old_rowsql_identifier应用于一个PostgreSQL中不可用的特性
action_reference_new_rowsql_identifier应用于一个PostgreSQL中不可用的特性
createdtime_stamp应用于一个PostgreSQL中不可用的特性

PostgreSQL中的触发器有两点与 SQL 标准不兼容,这会影响在该信息模式中的表示。第一,在PostgreSQL中触发器的名字是局限于每个表的,而不是独立于模式对象。因此可能在一个模式中会有重复的触发器名称,只要它们属于不同的表(trigger_catalogtrigger_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

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
udt_catalogsql_identifier包含该类型的数据库名(总是当前数据库)
udt_schemasql_identifier包含该类型的模式名
udt_namesql_identifier该类型的名字
privilege_typecharacter_data总是TYPE USAGE
is_grantableyes_or_no如果该特权是可授予的,则为YES,否则为NO

五十七、usage_privileges

        视图usage_privileges标识所有在多种对象上授予的USAGE特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。在PostgreSQL中,这当前适用于排序规则、域、外部数据包装器、外部服务器和序列。对每一个对象、授予者和被授予者都有一行。

        由于在PostgreSQL中排序规则并没有真正的特权,这个视图对所有排序规则显示由拥有者授予给PUBLIC的隐式非可授予的USAGE特权。但是对其他对象类型则显示真实的特权。

        在 PostgreSQL 中,序列也支持除USAGE之外的SELECTUPDATE特权。这些是非标准的并且因此在该信息模式中不可见。

表 3.55. usage_privileges

名称数据类型描述
grantorsql_identifier授予该特权的角色名
granteesql_identifier被授予该特权的角色名
object_catalogsql_identifier包含该对象的数据库名(总是当前数据库)
object_schemasql_identifier如果适用,则是包含该对象的模式名,否则为一个空字符串
object_namesql_identifier该对象的名称
object_typecharacter_dataCOLLATIONDOMAINFOREIGN DATA WRAPPERFOREIGN SERVERSEQUENCE
privilege_typecharacter_data总是USAGE
is_grantableyes_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_catalogsql_identifier包含该类型的数据库名(总是当前数据库)
user_defined_type_schemasql_identifier包含该类型的模式名
user_defined_type_namesql_identifier该类型的名字
user_defined_type_categorycharacter_data当前总是STRUCTURED
is_instantiableyes_or_no应用于一个PostgreSQL中不可用的特性
is_finalyes_or_no应用于一个PostgreSQL中不可用的特性
ordering_formcharacter_data应用于一个PostgreSQL中不可用的特性
ordering_categorycharacter_data应用于一个PostgreSQL中不可用的特性
ordering_routine_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
ordering_routine_schemasql_identifier应用于一个PostgreSQL中不可用的特性
ordering_routine_namesql_identifier应用于一个PostgreSQL中不可用的特性
reference_typecharacter_data应用于一个PostgreSQL中不可用的特性
data_typecharacter_data应用于一个PostgreSQL中不可用的特性
character_maximum_lengthcardinal_number应用于一个PostgreSQL中不可用的特性
character_octet_lengthcardinal_number应用于一个PostgreSQL中不可用的特性
character_set_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
character_set_schemasql_identifier应用于一个PostgreSQL中不可用的特性
character_set_namesql_identifier应用于一个PostgreSQL中不可用的特性
collation_catalogsql_identifier应用于一个PostgreSQL中不可用的特性
collation_schemasql_identifier应用于一个PostgreSQL中不可用的特性
collation_namesql_identifier应用于一个PostgreSQL中不可用的特性
numeric_precisioncardinal_number应用于一个PostgreSQL中不可用的特性
numeric_precision_radixcardinal_number应用于一个PostgreSQL中不可用的特性
numeric_scalecardinal_number应用于一个PostgreSQL中不可用的特性
datetime_precisioncardinal_number应用于一个PostgreSQL中不可用的特性
interval_typecharacter_data应用于一个PostgreSQL中不可用的特性
interval_precisioncardinal_number应用于一个PostgreSQL中不可用的特性
source_dtd_identifiersql_identifier应用于一个PostgreSQL中不可用的特性
ref_dtd_identifiersql_identifier应用于一个PostgreSQL中不可用的特性

五十九、user_mapping_options

        视图user_mapping_options包含在当前数据库中为用户映射定义的所有选项。只有那些当前用户能够访问其相应外部服务器(作为拥有者或具有某些特权)的用户映射才会被显示。

表 3.57. user_mapping_options

名称数据类型描述
authorization_identifiersql_identifier被映射的用户名,如果映射是公共的则为PUBLIC
foreign_server_catalogsql_identifier这个映射所使用的外部服务器所在的数据库名(总是当前数据库)
foreign_server_namesql_identifier这个映射所使用的外部服务器的名称
option_namesql_identifier一个选项名
option_valuecharacter_data选项的值。除非当前用户是被映射的用户或者映射是PUBLIC的并且当前用户是服务器拥有者或者超级用户,这一列将显示为空。这样做的目的是保护作为用户映射选项存储的口令信息。

六十、user_mappings

        视图user_mappings包含定义在当前数据库中的所有用户映射。只有当前用户能够访问其对应外部服务器(作为拥有者或具有某些特权)的用户映射才会被显示。

表 3.58. user_mappings

名称数据类型描述
authorization_identifiersql_identifier被映射的用户名,如果映射是公共的则为PUBLIC
foreign_server_catalogsql_identifier这个映射所使用的外部服务器所在的数据库名(总是当前数据库)
foreign_server_namesql_identifier这个映射所使用的外部服务器的名称

六十一、view_column_usage

        视图view_column_usage标识被使用在一个视图的查询表达式(定义该视图的SELECT语句)中的所有列。只有当包含一列的表被一个当前已被启用角色拥有时,该列才会被包括在这个视图中。

注意:

系统表列不被包括。在某个时候这应该会被修复。

表 3.59. view_column_usage

名称数据类型描述
view_catalogsql_identifier包含该视图的数据库名(总是当前数据库)
view_schemasql_identifier包含该视图的模式名
view_namesql_identifier该视图的名称
table_catalogsql_identifier被视图所使用的列所属表的数据库名(总是当前数据库)
table_schemasql_identifier被视图所使用的列所属表的模式名
table_namesql_identifier被视图所使用的列所属表的名称
column_namesql_identifier被该视图所使用的列名

六十二、view_routine_usage

        视图view_routine_usage标识被使用在一个视图的查询表达式(定义该视图的SELECT语句)中的所有例程(函数和过程)。只有被一个当前已被启用角色拥有的例程才会被包括在这个视图中。

表 3.60. view_routine_usage

名称数据类型描述
table_catalogsql_identifier包含该视图的数据库名(总是当前数据库)
table_schemasql_identifier包含该视图的模式名
table_namesql_identifier该视图的名称
specific_catalogsql_identifier包含该函数的数据库名(总是当前数据库)
specific_schemasql_identifier包含该函数的模式名
specific_namesql_identifier该函数的“专用名”。详见第四十节

六十三、view_table_usage

        视图view_table_usage标识被使用在一个视图的查询表达式(定义该视图的SELECT语句)中的所有表。只有被一个当前已被启用角色拥有的表才会被包括在这个视图中。

注意:

系统表没有被包括。这应当会在某个时候被修复。

表 3.61. view_table_usage

名称数据类型描述
view_catalogsql_identifier包含该视图的数据库名(总是当前数据库)
view_schemasql_identifier包含该视图的模式名
view_namesql_identifier该视图的名称
table_catalogsql_identifier包含被该视图所使用的表的数据库名(总是当前数据库)
table_schemasql_identifier包含被该视图所使用的表的模式名
table_namesql_identifier包含被该视图所使用的表的名称

六十四、views

        视图views包含定义在当前数据库中的所有视图。只有当前用户能够访问(作为拥有者或具有某些特权)的视图才会被显示。

表 3.62. views

名称数据类型描述
table_catalogsql_identifier包含该视图的数据库名(总是当前数据库)
table_schemasql_identifier包含该视图的模式名
table_namesql_identifier该视图的名称
view_definitioncharacter_data定义视图的查询表达式(如果该视图不被一个当前已被启用角色拥有则为空)
check_optioncharacter_data应用于一个PostgreSQL中不可用的特性
is_updatableyes_or_no如果该视图是可更新的(允许UPDATEDELETE),则为YES,否则为NO
is_insertable_intoyes_or_no如果该视图是可插入的(允许INSERT),则为YES,否则为NO
is_trigger_updatableyes_or_no如果该视图上有一个INSTEAD OF UPDATE触发器,则为YES,否则为NO
is_trigger_deletableyes_or_no如果该视图上有一个INSTEAD OF DELETE触发器,则为YES,否则为NO
is_trigger_insertable_intoyes_or_no如果该视图上有一个INSTEAD OF INSERT触发器,则为YES,否则为NO
  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值