引言
信息模式本身是一个名为information_schema的模式。这个模式自动存在于所有数据库中。这个模式的拥有者是集簇中的初始数据库用户,并且该用户自然地拥有这个模式上的所有特权,包括删除它的能力(但是这样节省的空间是很小的)。
介绍
这个模式的拥有者是集簇中的初始数据库用户
test=# select * from pg_namespace;
oid | nspname | nspowner | nspacl
-------+--------------------+----------+-------------------------------------
99 | pg_toast | 10 |
12314 | pg_temp_1 | 10 |
12315 | pg_toast_temp_1 | 10 |
11 | pg_catalog | 10 | {postgres=UC/postgres,=U/postgres}
2200 | public | 10 | {postgres=UC/postgres,=UC/postgres}
13293 | information_schema | 10 | {postgres=UC/postgres,=U/postgres}
(6 rows)
test=# select * from pg_user;
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
postgres | 10 | t | t | t | t | ******** | |
(1 row)
复制
这个模式自动存在于所有数据库中
postgres=# select * from pg_namespace;
oid | nspname | nspowner | nspacl
-------+--------------------+----------+-------------------------------------
99 | pg_toast | 10 |
12314 | pg_temp_1 | 10 |
12315 | pg_toast_temp_1 | 10 |
11 | pg_catalog | 10 | {postgres=UC/postgres,=U/postgres}
2200 | public | 10 | {postgres=UC/postgres,=UC/postgres}
13293 | information_schema | 10 | {postgres=UC/postgres,=U/postgres}
(6 rows)
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# select * from pg_namespace;
oid | nspname | nspowner | nspacl
-------+--------------------+----------+-------------------------------------
99 | pg_toast | 10 |
12314 | pg_temp_1 | 10 |
12315 | pg_toast_temp_1 | 10 |
11 | pg_catalog | 10 | {postgres=UC/postgres,=U/postgres}
2200 | public | 10 | {postgres=UC/postgres,=UC/postgres}
13293 | information_schema | 10 | {postgres=UC/postgres,=U/postgres}
(6 rows)
test=#
复制
默认情况下,信息模式不在模式搜索路径中
test=# show search_path;
search_path
-----------------
"$user", public
(1 row)
复制
视图含义
information_schema_catalog_name
是一个表,它总是包含一行和一列,其中包含了当前数据库(SQL 术语中的当前目录)的名字
administrable_role_authorizations
标识当前用户对其有管理选项的所有角色
applicable_roles
当前用户可以使用其特权的所有角色。这意味着有某种角色授权链从当前用户到讨论中的角色。当前用户本身也是一个可应用的角色。可应用的角色的集合通常被用于权限检查。
attributes
包含数据库中定义的组合数据类型的属性的有关信息(注意该视图并不给出有关表列的信息,表列有时候在 PostgreSQL 上下文环境中也被称为属性)。只有当前用户能够访问(由于是拥有者获得的权限或是在类型上有某些特权)的那些属性会被显示。
character_sets
视图character_sets标识当前数据库中可用的字符集。因为 PostgreSQL 不支持在同一个数据库中有多个字符集,这个视图只显示一个字符集,它就是数据库编码。
check_constraint_routine_usage
标识被检查约束琐事使用的例程(函数和过程)。只有被一个当前启用的角色所拥有的例程才被显示。
check_constraints
包含所有检查约束,不管是定义在一个表上的还是定义在一个域上的,它们被一个当前启用的角色所拥有(表或域的拥有者就是约束的拥有者)。
collations
包含在当前数据库中可用的排序规则。
collation_character_set_applicability
标识可用的排序规则适用于哪些字符集。在 PostgreSQL 中,每个数据库中只有一种字符集(解释见第 36.7 节),因此这个视图没有提供很有用的信息。
column_column_usage
标识依赖于同一表中的另一个基本列生成的所有列。只包含当前启用的角色所拥有的表。
column_domain_usage
标识所有使用定义在当前数据库中并且被一个当前启用的角色拥有的域的列(表列或视图列)。
column_options
包含为当前数据库中外部表列定义的所有选项。只有当前用户能够访问(作为拥有者或具有某些特权)的那些外部表列才被显示。
column_privileges
标识所有授予给一个当前启用的角色或者被一个当前启用的角色授予的特权。对每一个列、授予者、被授予者的组合只有一行。
column_udt_usage
标识所有使用被一个当前启用的角色拥有的数据类型的列。注意在PostgreSQL中,内建数据类型的行为和用户定义的类型相似,因此它们也被包括在这里。
columns
包含数据库中有关所有表列(或视图列)的信息。系统列(ctid等)不被包括在内。只有那些当前用户能够访问(作为拥有者或具有某些特权)的列才被显示。
constraint_column_usage
标识在当前数据库中被某个约束使用的所有列。只有包含在被一个当前启用的角色拥有的表中的那些列才被显示。对于一个检查约束,这个视图标识被用在该检查约束中的列。对于一个外键约束,这个视图标识外键引用的列。对于一个唯一或主键约束,这个视图标识被约束的列。
constraint_table_usage
标识在当前数据库中被某个约束使用的所有表(这与视图table_constraints不同,它标识哪些表约束定义在哪些表上)。对于一个外键约束,这个视图标识该外键引用的表。对于一个唯一或主键约束,这个视图仅标识该约束属于的表。检查约束和非空约束不被包括在这个视图中。
data_type_privileges
标识当前用户能够访问(作为被描述对象的拥有者或者具有其上的某种特权)的所有数据类型描述符。只要一个数据类型被用在一个表列、一个域或一个函数(作为参数或返回类型)就会生成一个数据类型描述符并且在那个实例中存储一些有关该数据类型如何被使用的信息(例如,声明的最大长度,如果适用)。每一个数据类型描述符被赋予一个任意的标识符,它在被赋予给一个对象(表、域、函数)的数据类型描述符中唯一。这个视图对于应用可能没什么用,但是它被用于定义信息模式中的一些其他视图。
domain_constraints
包含所有属于当前数据库中定义的域的约束。只有当前用户能访问的那些域才被显示(作为拥有者或具有某些特权)。
domain_udt_usage
标识所有基于被一个当前启用的角色拥有的数据类型的域。注意在PostgreSQL中,内建数据类型的行为相似于用户定义的类型,因此它们也被包括在这里。
domains
包含定义在当前数据库中的所有域。只有当前用户能够访问(作为拥有者或具有某些特权)的域才被显示。
element_types
包含数组元素的数据类型描述符。当一个表列、组合类型属性、域、函数参数或函数返回值被定义为一种数组类型,相应的信息模式视图只在列data_type中包含ARRAY。要获得该数组元素类型的信息,你可以连接该相应的视图和这个视图。例如,要显示一个表的列及其数据类型和数组元素类型
enabled_roles
标识当前“已被启用的角色”。已被启用的角色被递归地定义为:当前用户以及被授予给具有自动继承的已被启用角色的所有角色。换句话说,就是当前用户是其直接或间接成员的所有角色。
foreign_data_wrapper_options
包含为当前数据库中外部数据包装器定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部数据包装器被显示。
foreign_data_wrappers
包含定义在当前数据库中的所有外部数据包装器。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部数据包装器才会被显示。
foreign_server_options
包含为当前数据库中外部服务器定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部服务器才会被显示。
foreign_servers
包含当前数据库中定义的所有外部服务器。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部服务器才会被显示。
foreign_table_options
包含为当前数据库中外部表定义的所有选项。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部表才会被显示。
foreign_tables
包含定义在当前数据库中的所有外部表。只有那些当前用户能够访问(作为拥有者或具有某些特权)的外部表才会被显示。
key_column_usage
标识当前数据库中所有被某种唯一、主键或外键约束限制的列。检查约束不被包括在这个视图中。只有那些当前用户能够访问的列才会被显示(作为拥有者或具有某些特权)。
parameters
包含当前数据库中所有函数的参数的有关信息。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数才会被显示。
referential_constraints
包含当前数据库中的所有引用(外键)约束。只有那些当前用户具有其引用表上写权限(作为拥有者或具有某些除SELECT之外的特权)的约束才会被显示。
role_column_grants
标识所有在列上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在column_privileges中找到。这个视图和column_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的列。
role_routine_grants
标识所有在函数上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在routine_privileges中找到。这个视图和routine_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的函数。
role_table_grants
标识所有在表或视图上授予的特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在table_privileges中找到。这个视图和table_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的表。
role_udt_grants
标识所有在用户定义类型上授予的USAGE特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在udt_privileges中找到。这个视图和udt_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的对象。因为数据类型在 PostgreSQL 中并没有真正的特权,而是只有一个给PUBLIC的隐式授予,这个视图为空。
role_usage_grants
标识所有在多种对象上授予的USAGE特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。更多信息可以在usage_privileges中找到。这个视图和usage_privileges之间的唯一实质性区别是:这个视图忽略那些以授予给PUBLIC的方式使当前用户获得其访问权限的对象。
routine_privileges
标识所有在函数上授予的特权,其授予者或被授予者是一个当前已被启用的角色。对于每一种函数、授予者和被授予者的组合,这里都有一行。
routines
包含当前数据库中所有的函数和过程。只有那些当前用户能够访问(作为拥有者或具有某些特权)的函数和过程才会被显示。
schemata
包含当前数据库中被当前用户(作为属主或具有某些特权)可访问的所有模式。
sequences
包含所有定义在当前数据库中的序列。只有那些当前用户能够访问(作为拥有者或具有某些特权)的序列才会被显示。
sql_features
包含的信息指示了哪些 SQL 标准中定义的正式特性被PostgreSQL所支持。这和附录 D中的信息一样。这里你也能找到一些额外的背景信息。
sql_implementation_info
包含的信息指示剩下的由 SQL 标准实现定义的多个方面。这类信息主要用来在 ODBC 接口的情境中使用;其它接口的用户可能将发现这类信息用处不大。由于这个原因,个体实现信息项没有在这里描述,你将会在 ODBC 接口的描述中找到它们。
sql_languages
为每一种被PostgreSQL支持的 SQL 语言绑定包含一行。PostgreSQL支持在 C 中的直接 SQL 和嵌入式 SQL,这是你从这张表中知道的所有东西。
sql_packages
包含的信息指示哪些定义在 SQL 标准中的特性包被PostgreSQL支持。
sql_parts
包含的信息指示哪些定义在 SQL 标准中的部分被PostgreSQL支持。
sql_sizing
包含有关PostgreSQL中多种尺寸限制和最大值的信息。这类信息主要用来在 ODBC 接口的情境中使用;其它接口的用户可能将发现这类信息用处不大。由于这个原因,个体实现信息项没有在这里描述,你将会在 ODBC 接口的描述中找到它们。
sql_sizing_profiles
包含有关 SQL 标准的多种 profile 所需的sql_sizing值的信息。PostgreSQL不追踪任何 SQL profile,因此这个表为空。
table_constraints
包含属于特定表的所有约束,这些表要满足的条件是:当前用户拥有表或者是当前用户在表上具有某种除SELECT之外的特权。
table_privileges
标识在表或视图上所有被授予的特权,这些特权必须是被一个当前已被启用角色授出或者被授予给一个当前已被启用角色。对每一个表、授予者和被授予者的组合都有一行。
tables
包含定义在当前数据库中的所有表和视图。只有那些当前用户能够访问(作为拥有者或具有某些特权)的表和视图才会被显示。
transforms
包含定义在当前数据库中的转换的信息。更准确 来说, 包含在转换中的每一个函数(“FROM SQL”或者 “TO SQL”函数)在其中都有一行。
triggered_update_columns
对于当前数据库中指定一个列列表(如UPDATE OF column1, column2)的触发器,视图triggered_update_columns标识这些列。没有指定一个列列表的触发器不被包括在这个视图中。只有那些当前用户拥有或具有某种除SELECT之外特权的列才会被显示。
triggers
包含所有定义在当前数据库中表和视图上的触发器,并且只显示当前用户拥有的触发器或者是当前用户在其上具有某种除SELECT之外特权的触发器。
udt_privileges
标识所有在用户定义类型上授予的 USAGE特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。对每一个类型、授予者和被授予者的组合都有一行。
usage_privileges
标识所有在多种对象上授予的USAGE特权,这些特权的授予者或者被授予者是一个当前已被启用的角色。在PostgreSQL中,这当前适用于排序规则、域、外部数据包装器、外部服务器和序列。对每一个对象、授予者和被授予者都有一行。
user_defined_types
目前包含定义在当前数据库中的所有组合类型。只有那些当前用户能够访问(作为拥有者或具有某些特权)的类型才会被显示。
user_mapping_options
包含在当前数据库中为用户映射定义的所有选项。只有那些当前用户能够访问其相应外部服务器(作为拥有者或具有某些特权)的用户映射才会被显示。
user_mappings
包含定义在当前数据库中的所有用户映射。只有当前用户能够访问其对应外部服务器(作为拥有者或具有某些特权)的用户映射才会被显示。
view_column_usage
标识被使用在一个视图的查询表达式(定义该视图的SELECT语句)中的所有列。只有当包含一列的表被一个当前已被启用角色拥有时,该列才会被包括在这个视图中。
view_routine_usage
标识被使用在一个视图的查询表达式(定义该视图的SELECT语句)中的所有例程(函数和过程)。只有被一个当前已被启用角色拥有的例程才会被包括在这个视图中。
view_table_usage
标识被使用在一个视图的查询表达式(定义该视图的SELECT语句)中的所有表。只有被一个当前已被启用角色拥有的表才会被包括在这个视图中。
views
包含定义在当前数据库中的所有视图。只有当前用户能够访问(作为拥有者或具有某些特权)的视图才会被显示。
复制
参考
http://www.postgres.cn/docs/12/information-schema.html
文章转载自CP的PostgreSQL厨房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
2101次阅读
2025-04-21 16:58:09
QPlus V6.3 更新,新增PostgreSQL与PolarDB PG支持,OceanBase 容灾管理重磅上线
沃趣科技
269次阅读
2025-05-13 09:39:27
4月“墨力原创作者计划”获奖名单公布!
墨天轮编辑部
220次阅读
2025-05-13 16:21:59
中国PostgreSQL培训认证体系新增PGAI应用工程师方向
开源软件联盟PostgreSQL分会
197次阅读
2025-05-06 10:21:13
华象新闻 | PostgreSQL 18 Beta 1、17.5、16.9、15.13、14.18、13.21 发布
严少安
174次阅读
2025-05-09 11:34:10
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PG
老冯云数
173次阅读
2025-05-07 10:06:22
SQL 优化之 OR 子句改写
xiongcc
152次阅读
2025-04-21 00:08:06
告别老旧mysql_fdw,升级正当时
NickYoung
128次阅读
2025-04-29 11:15:18
PostgreSQL中文社区亮相于第八届数字中国峰会
PostgreSQL中文社区
121次阅读
2025-05-07 10:06:20
PostgreSQL的dblink扩展模块使用方法
szrsu
117次阅读
2025-04-24 17:39:30