pg_snapshot
用户级事务 ID 快照
当前查看 PostgreSQL 18.6。
PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。
定义
用户级事务 ID 快照
pg_snapshot
- 目录名称
- pg_catalog.pg_snapshot
- 类型 OID
- 5038
- 类型种类
- 基础类型
- 声明长度
- 变长(varlena)
- 存储策略
- 扩展
- 输入函数
- pg_snapshot_in
- 输出函数
- pg_snapshot_out
- 手册中的声明
- pg_snapshot_xip ( pg_snapshot ) → setof xid8 返回快照中包含的正在进行的事务 ID集。
- 手册中的声明
- pg_snapshot_xmax ( pg_snapshot ) → xid8 返回快照的 xmax 。
- 手册中的声明
- pg_snapshot_xmin ( pg_snapshot ) → xid8 返回快照的 xmin 。
- 手册中的声明
- pg_visible_in_snapshot ( xid8 , pg_snapshot ) → boolean 根据此快照,给定的事务 ID 是否 可见 (即该事务是否在生成快照之前完成)?注意,此函数无法为子事务 ID(subxid)给出正确结果;详见 第 67.3 节 。
中文手册
阅读来源定义
9.27. 系统信息函数和操作符
9.27. 系统信息函数和操作符
本节描述的函数用于获取有关PostgreSQL安装的各种信息。
表 9.71列出了多个用于提取会话和系统信息的函数。
除了本节列出的函数外,还有许多与统计系统相关的函数,这些函数也提供系统信息。有关更多信息,请参见第 27.2.26 节。
表 9.71. 会话信息函数
|
函数 描述 |
|
|---|---|
|
返回当前数据库的名称。(SQL 标准将数据库称为“目录(catalogs)”,因此 |
|
|
返回客户端提交的当前正在执行的查询文本(可能包含多条语句)。 |
|
|
这个等同于 |
|
|
返回在搜索路径中的第一个模式的名称(如果搜索路径为空则返回空值)。这个模式将用于没有指定目标模式就创建的任何表或其他已命名对象。 |
|
|
返回当前有效搜索路径中所有模式名称的数组,按优先级排序。(当前search_path设置中不对应于已存在且可搜索的模式的项会被省略。)如果布尔参数为 |
|
|
返回当前执行上下文的用户名。 |
|
|
返回当前客户端的 IP 地址;如果当前连接通过 Unix 域套接字建立,则返回 |
|
|
返回当前客户端的IP端口号,如果当前连接是通过Unix 域套接字则返回 |
|
|
返回服务器接受当前连接的IP地址,如果当前连接是通过Unix 域套接字则返回 |
|
|
返回服务器接受当前连接的IP端口号,如果当前连接是通过Unix 域套接字则返回 |
|
|
返回附加到当前会话的服务器进程的进程ID。 |
|
|
返回一个数组,包含阻止指定进程 ID 对应的服务器进程获取锁的会话进程 ID;如果不存在这样的服务器进程,或该进程未被阻塞,则返回空数组。 一个服务器进程在以下情况下会阻塞另一个进程:它持有与后者锁请求冲突的锁,称为硬阻塞;或者它正在等待一个与后者锁请求冲突的锁,并在等待队列中排在后者前面,称为软阻塞。使用并行查询时,即使实际持锁或等待锁的是子工作进程,结果也始终列出客户端可见的进程 ID,即 pg_backend_pid 的结果。因此,结果中可能出现重复 PID。此外,预备事务持有冲突锁时,用进程 ID 零表示。 频繁调用这个函数可能会对数据库性能产生一些影响,因为它需要在短时间内独占访问锁管理器的共享状态。 |
|
|
返回服务器配置文件最近一次加载的时间。如果当时当前会话已经存在,则返回该会话自身重新读取配置文件的时间(因此不同会话中的返回时间会略有不同)。否则,返回 postmaster 进程重新读取配置文件的时间。 |
|
|
返回当前由日志收集器使用的日志文件的路径名。路径包括log_directory目录和单独的日志文件名。如果日志收集器已禁用,则结果为 默认情况下,此函数仅限超级用户和具有 |
|
|
返回当前服务器会话已加载的可加载模块列表。除非模块作者通过 PG_MODULE_MAGIC_EXT 宏提供了值,否则 module_name 和 version 字段均为 NULL。file_name 字段给出模块(共享库)的文件名。 |
|
|
返回当前会话的临时模式的OID,如果没有则返回0(因为它没有创建任何临时表)。 |
|
|
如果给定的OID是另一个会话的临时模式的OID则返回真。(这可能是有用的,例如,在目录显示中排除其他会话的临时表。) |
|
|
|
|
|
如果服务器在编译时启用了 NUMA 支持,则返回真。 |
|
|
返回当前会话正在侦听的异步通知通道的名称集。 |
|
|
|
|
|
返回服务器启动时的时间。 |
|
|
返回一个数组,包含阻止指定进程 ID 对应的服务器进程获取安全快照的会话进程 ID;如果不存在这样的服务器进程,或该进程未被阻塞,则返回空数组。 运行 频繁调用这个函数可能会对数据库性能产生一些影响,因为它需要在短时间内访问谓词锁管理器的共享状态。 |
|
|
返回PostgreSQL触发器的当前嵌套层级(如果不是从触发器内部直接或间接调用,则为 0)。 |
|
|
返回会话用户名。 |
|
|
返回用户在被分配数据库角色之前,于认证周期中提供的认证方法和身份(如果有)。结果表示为 |
|
|
这个相当于 |
注意
current_catalog、current_role、current_schema、current_user、session_user 和 user 在 SQL 中具有特殊的语法地位:调用时后面不能加括号。在 PostgreSQL 中,current_schema 可以选择加括号,但其他函数不可以。
session_user通常是发起当前数据库连接的用户,但超级用户可以用SET SESSION AUTHORIZATION修改此设置。current_user是用于权限检查的用户标识,通常等于会话用户,但可以用SET ROLE更改。在执行具有SECURITY DEFINER属性的函数期间,它也会改变。用 Unix 的术语来说,会话用户是“真实用户”,当前用户是“有效用户”。current_role和user是current_user的同义词。(SQL 标准区分current_role和current_user,但PostgreSQL不区分,因为它将用户和角色统一为同一种实体。)
表 9.72列出了允许以编程方式查询对象访问权限的函数。(关于权限的更多信息,请参见第 5.8 节。)在这些函数中,可以通过名称或 OID(pg_authid.oid)指定要查询权限的用户;如果名称为public,则检查 PUBLIC 伪角色的权限。也可以完全省略user参数,此时使用current_user。要查询的对象也可以通过名称或 OID 指定。通过名称指定时,如适用,可以包含模式名。所需访问权限由文本字符串指定,其值必须为适用于该对象类型的权限关键字之一(例如SELECT)。还可以在权限类型后附加WITH GRANT OPTION,以检查是否拥有该权限及其授予选项。也可以用逗号分隔列出多个权限类型;只要拥有列出的任一权限,结果就为真。(权限字符串不区分大小写,权限名之间允许有额外的空白,但权限名内部不允许。)例如:
SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
表 9.72. 访问权限查询函数
|
函数 描述 |
|
|---|---|
|
用户是否对表的至少一列具有权限?如果拥有整个表的权限,或至少一列获得了该权限的列级授权,则返回真。允许的权限类型为 |
|
|
用户对指定的表列有权限么?如果对整个表持有权限,或者对列授予了列级别的权限,则会成功。可以通过名称或属性编号( |
|
|
用户对数据库有权限吗?允许的权限类型为 |
|
|
用户是否具有外部数据包装器权限?唯一允许的权限类型为 |
|
|
用户对函数有权限吗?唯一允许的权限类型是 当通过名称而不是OID指定函数时,允许的输入与
SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
|
|
|
用户对语言有权限吗?唯一允许的权限类型是 |
|
|
用户是否拥有大对象的权限?可用的权限类型是 |
|
|
用户是否具有配置参数的权限?参数名称不区分大小写。允许的权限类型为 |
|
|
用户对模式有权限吗?允许的权限类型是 |
|
|
用户是否具有序列权限?允许的权限类型为 |
|
|
用户是否对外部服务器有权限?唯一允许的权限类型是 |
|
|
用户对表有权限吗?允许的权限类型有 |
|
|
用户对表空间有权限吗?唯一允许的权限类型是 |
|
|
用户对数据类型有权限吗?唯一允许的权限类型是 |
|
|
用户是否具有角色权限?允许的权限类型为 |
|
|
在当前用户和当前环境的上下文中,指定表的行级安全是否生效? |
表 9.73列出了aclitem类型可用的操作符;该类型是访问权限在系统目录中的表示形式。有关如何解读访问权限值的信息,请参见第 5.8 节。
表 9.73. aclitem 操作符
|
操作符 描述 示例 |
|
|---|---|
|
两个
|
|
|
数组是否包含指定的权限?(如果数组中存在一个条目,其被授权者和授权者与该
|
表 9.74列出了一些用于管理aclitem类型的其他函数。
表 9.74. aclitem 函数
|
函数 描述 |
|
|---|---|
|
构造一个 |
|
|
以行集的形式返回 |
|
|
使用给定的属性构造 |
表 9.75列出了判断某个特定对象是否可见的函数,其判断依据是当前模式搜索路径。例如,如果表所在的模式位于搜索路径中,并且在搜索路径的更前面没有同名表,就称该表可见。这等价于说,可以只通过表名引用该表,而不必显式地用模式限定。因此,要列出所有可见表的名称:
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
对于函数和操作符,只要搜索路径中更靠前的位置没有对象具有与被检查对象相同的名称和参数数据类型,就称被检查对象可见。对于操作符类和操作符族,会同时考虑名称及关联的索引访问方法。
表 9.75. 模式可见性查询函数
|
函数 描述 |
|
|---|---|
|
排序规则在搜索路径中可见吗? |
|
|
转换在搜索路径中可见吗? |
|
|
函数在搜索路径中可见吗?(这也适用于过程和聚合。) |
|
|
操作符类在搜索路径中可见吗? |
|
|
操作符在搜索路径中可见吗? |
|
|
操作符族在搜索路径中可见吗? |
|
|
统计对象在搜索路径中可见吗? |
|
|
表在搜索路径中可见吗?(这适用于所有类型的关系,包括视图、物化视图、索引、序列和外部表。) |
|
|
全文检索配置是否在搜索路径中可见? |
|
|
全文检索词典是否在搜索路径中可见? |
|
|
全文检索解析器是否在搜索路径中可见? |
|
|
全文检索模板是否在搜索路径中可见? |
|
|
类型(或域)在搜索路径中可见吗? |
所有这些函数都需要用对象 OID 标识要检查的对象。如果想按名称测试对象,使用 OID 别名类型会很方便(regclass,regtype,regprocedure,regoperator,regconfig,或regdictionary),例如:
SELECT pg_type_is_visible('myschema.widget'::regtype);
注意,用这种方式测试不带模式限定的类型名并没有太大意义:只要该名称能够被识别,它就必然可见。
表 9.76列出从系统目录中提取信息的函数。
表 9.76. 系统目录信息函数
|
函数 描述 |
|
|---|---|
|
返回由其类型OID和可能的类型修饰符标识的数据类型的SQL名称。如果没有已知的类型修饰符,则传递NULL值给类型修饰符。 |
|
|
返回由类型 OID 标识的域的基础类型 OID。如果参数是非域类型的 OID,则原样返回该参数。如果参数不是有效的类型 OID,则返回 NULL。如果存在域依赖链,则递归查找,直到找到基础类型。 假设执行了
|
|
|
将提供的编码名称转换为表示在某些系统目录表中使用的内部标识符的整数。如果提供了未知的编码名称,则返回 |
|
|
将在某些系统目录表中用作编码内部标识符的整数转换为可读的字符串。如果提供了无效的编码编号,则返回空字符串。 |
|
|
返回一组记录,描述存在于PostgreSQL系统目录中的外键关系。 |
|
|
重建约束的创建命令。(这是反编译重建的结果,并非命令的原始文本。) |
|
|
反编译存储在系统目录中的表达式的内部形式,例如列的默认值。如果表达式可能包含 Var 节点,请将它们所引用的关系的 OID 指定为第二个参数;如果预计不含 Var 节点,传入零即可。 |
|
|
重建函数或过程的创建命令。(这是反编译重建的结果,并非命令的原始文本。)结果是一条完整的 |
|
|
重建函数或过程的参数列表,采用其在 |
|
|
重建标识函数或过程所需的参数列表,采用其在 |
|
|
重建函数的 |
|
|
重建索引的创建命令。(这是反编译重建的结果,并非命令的原始文本。)如果提供了 |
|
|
返回一组记录,描述服务器识别的 SQL 关键字。word 列为关键字本身。catcode 列为分类代码:U 表示非保留关键字,C 表示可作列名的关键字,T 表示可作类型名或函数名的关键字,R 表示完全保留的关键字。如果关键字可直接作为 SELECT 列表中的“裸”列标签,barelabel 为 true;如果只能出现在 AS 之后,则为 false。catdesc 列以可能经过本地化的字符串描述关键字分类;baredesc 列以可能经过本地化的字符串描述关键字用作列标签的状态。 |
|
|
重建分区约束的定义。(这是反编译重建的结果,并非命令的原始文本。) |
|
|
重建分区表的分区键定义,格式与 CREATE TABLE 的 PARTITION BY 子句中的写法相同。(这是反编译重建的定义,并非命令原文。) |
|
|
重建规则的创建命令。(这是反编译重建的结果,并非命令的原始文本。) |
|
|
返回与列相关联的序列名称,如果没有序列与该列相关联则返回NULL。如果列是标识列,则关联序列是在内部为该列创建的序列。对于使用一种 serial 类型( 典型用法是读取标识列或 serial 列所用序列的当前值,例如:
SELECT currval(pg_get_serial_sequence('sometable', 'id'));
|
|
|
重建扩展统计对象的创建命令。(这是反编译重建的结果,并非命令的原始文本。) |
|
|
重建触发器的创建命令。(这是反编译重建的结果,并非命令的原始文本。) |
|
|
根据OID返回角色名。 |
|
|
重建定义视图或物化视图的 |
|
|
重建定义视图或物化视图的 |
|
|
根据视图的文本名称而不是其 OID,重建定义视图或物化视图的 |
|
|
测试一个索引列是否具有指定名称的属性。表 9.77列出了常用索引列属性。(注意,扩展访问方法可以为其索引定义额外的属性名。)如果属性名未知或不适用于特定对象,或者OID或列号不能识别有效的对象,则返回 |
|
|
测试一个索引是否具有指定名称的属性。表 9.78列出了常用的索引属性。(注意,扩展访问方法可以为其索引定义额外的属性名。)如果属性名未知或不适用于特定对象,或者OID不能识别有效的对象,则返回 |
|
|
测试索引访问方法是否具有指定名称的属性。访问方法属性如表 9.79所示。如果属性名未知或不适用于特定对象,或者OID不能识别有效的对象,则返回 |
|
|
返回源自 |
|
|
返回与给定 GUC 关联的标志数组;如果该 GUC 不存在,则返回 |
|
|
返回在指定表空间中存储了对象的数据库 OID 集合。如果此函数返回任何行,则说明该表空间不为空,不能删除。要查看存放在该表空间中的具体对象,需要连接到 |
|
|
返回表空间所在的文件系统路径。 |
|
|
返回所传入值的数据类型的 OID。这有助于排查问题或动态构造 SQL 查询。函数声明的返回类型是
|
|
|
返回传入值的排序规则名称。必要时会为返回的名称加上引号和模式限定。如果无法为参数表达式推导出排序规则,则返回
|
|
|
将文本关系名转换为它的OID。通过将字符串类型转换为 |
|
|
将文本排序规则名称转换为它的OID。通过将字符串类型转换为 |
|
|
将文本模式名转换为它的OID。通过将字符串转换为 |
|
|
将文本操作符名称转换为它的OID。通过将字符串类型转换为 |
|
|
将文本操作符名称(带有参数类型)转换为其OID。通过将字符串转换为 |
|
|
将文本函数或过程名转换为其OID。通过将字符串转换为 |
|
|
将文本函数或过程名(带有参数类型)转换为其OID。通过将字符串类型转换为 |
|
|
将文本角色名转换为它的OID。通过将字符串类型转换为 |
|
|
解析文本字符串,从中提取可能的类型名,并将该名称转换为类型 OID。字符串中的语法错误会导致报错;但如果字符串是语法有效的类型名,只是在系统目录中找不到该类型,结果就是 |
|
|
解析文本字符串,从中提取可能的类型名称,并转换其类型修饰符(如果有)。字符串中的语法错误会引发错误;但如果字符串是语法有效的类型名称,只是在系统目录中找不到,则结果为
|
大多数重建(反编译)数据库对象的函数都带有可选的 pretty 标志。若为 true,结果会进行“美化输出”,省略不必要的括号并添加空白以提高可读性。美化后的格式更易读,但默认格式更可能在未来 PostgreSQL 版本中得到相同解释,因此导出数据时应避免使用美化输出。给 pretty 参数传入 false 与省略该参数的结果相同。
表 9.77. 索引列属性
| Name | 说明 |
|---|---|
asc |
在向前扫描时列是按照升序排列吗? |
desc |
在向前扫描时列是按照降序排列吗? |
nulls_first |
在向前扫描时列排序会把空值排在前面吗? |
nulls_last |
在向前扫描时列排序会把空值排在最后吗? |
orderable |
列具有已定义的排序顺序吗? |
distance_orderable |
能否按“距离”操作符的结果有序地扫描该列,例如ORDER BY col <-> constant。 |
returnable |
列值是否可以通过一次仅索引扫描返回? |
search_array |
列是否原生支持col = ANY(array)搜索? |
search_nulls |
列是否支持IS NULL和IS NOT NULL搜索? |
表 9.78. 索引属性
| Name | 说明 |
|---|---|
clusterable |
索引是否可以用于CLUSTER命令? |
index_scan |
索引是否支持普通扫描(非位图)? |
bitmap_scan |
索引是否支持位图扫描? |
backward_scan |
在扫描中扫描方向能否被更改(为了支持游标上无需物化的FETCH BACKWARD)? |
表 9.79. 索引访问方法属性
| Name | 说明 |
|---|---|
can_order |
访问方法是否支持ASC、DESC以及CREATE INDEX中的有关关键词? |
can_unique |
访问方法是否支持唯一索引? |
can_multi_col |
访问方法是否支持多列索引? |
can_exclude |
访问方法是否支持排除约束? |
can_include |
该访问方法是否支持 CREATE INDEX 的 INCLUDE 子句? |
表 9.80. GUC 标志
| 标志 | 说明 |
|---|---|
EXPLAIN |
带有此标志的参数会在EXPLAIN (SETTINGS)命令的输出中显示。 |
NO_SHOW_ALL |
带有此标志的参数不会在SHOW ALL命令的输出中显示。 |
NO_RESET |
带有此标志的参数不支持RESET命令。 |
NO_RESET_ALL |
具有此标志的参数将被排除在RESET ALL命令之外。 |
NOT_IN_SAMPLE |
带有此标志的参数默认情况下不包含在 postgresql.conf中。 |
RUNTIME_COMPUTED |
具有此标志的参数是在运行时计算的参数。 |
表 9.81列出了与数据库对象标识和寻址有关的函数。
表 9.81. 对象信息和寻址函数
|
函数 描述 |
|
|---|---|
|
返回由系统目录 OID、对象 OID 和子对象 ID 指定的数据库对象的ACL。对于未定义的对象,此函数返回 |
|
|
返回数据库对象的文本描述,对象由系统目录 OID、对象 OID 和子对象 ID 指定(例如表中的列号;引用整个对象时,子对象 ID 为零)。该描述供人阅读,并可能根据服务器配置被翻译。这对于确定 |
|
|
返回一行,其中包含足以唯一标识数据库对象的信息,该对象由系统目录 OID、对象 OID 和子对象 ID 指定。这些信息供机器读取,永远不会被翻译。 |
|
|
返回一行,其中包含足以唯一标识数据库对象的信息,该对象由系统目录 OID、对象 OID 和子对象 ID 指定。返回的信息与当前服务器无关,也就是说,它也能用于标识另一台服务器上名称相同的对象。 |
|
|
返回一行,其中包含足以唯一标识数据库对象的信息,该对象由类型代码、对象名称数组和参数数组指定。返回的值就是 |
pg_get_acl可用于检索和检查与数据库对象关联的权限,而无需查看特定目录。例如,若要检索当前数据库中对象上已授予的全部权限:
postgres=# SELECT
(pg_identify_object(s.classid,s.objid,s.objsubid)).*,
pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl
FROM pg_catalog.pg_shdepend AS s
JOIN pg_catalog.pg_database AS d
ON d.datname = current_database() AND
d.oid = s.dbid
JOIN pg_catalog.pg_authid AS a
ON a.oid = s.refobjid AND
s.refclassid = 'pg_authid'::regclass
WHERE s.deptype = 'a';
-[ RECORD 1 ]-----------------------------------------
type | table
schema | public
name | testtab
identity | public.testtab
acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
表 9.82中的函数用于提取此前通过COMMENT命令存储的注释。如果找不到与指定参数对应的注释,则返回空值。
表 9.82. 注释信息函数
|
函数 描述 |
|
|---|---|
|
返回表列的注释,列由所属表的 OID 和列号指定。( |
|
|
根据数据库对象的 OID 和所属系统目录名返回其注释。例如,obj_description(123456, 'pg_class') 返回 OID 为 123456 的表的注释。 |
|
|
返回仅由其 OID 指定的数据库对象的注释。此形式已弃用,因为无法保证 OID 在不同系统目录之间唯一,因而可能返回错误的注释。 |
|
|
返回共享数据库对象的注释,对象由其 OID 和所在系统目录的名称指定。此函数与 |
表 9.83中所示的函数有助于检查待输入数据的有效性。
表 9.83. 数据有效性检查函数
|
函数 描述 示例 |
|
|---|---|
|
测试给定的 只有当该数据类型的输入函数已经更新为把无效输入报告为一种“软”错误时,此函数才能按预期工作。否则,无效输入将中止事务,就像直接将该字符串转换为该类型一样。
|
|
|
测试给定的 只有当该数据类型的输入函数已经更新为把无效输入报告为一种“软”错误时,此函数才能按预期工作。否则,无效输入将中止事务,就像直接将该字符串转换为该类型一样。
message | detail | hint | sql_error_code
------------------------------------------------------+--------+------+----------------
value "42000000000" is out of range for type integer | | | 22003
|
表 9.84中展示的函数以一种可导出的形式提供了服务器事务信息。这些函数的主要用途是判断在两个快照之间哪些事务被提交。
表 9.84. 事务 ID 和快照信息函数
|
函数 描述 |
|
|---|---|
|
返回给定事务 ID 与当前事务计数器之间的事务数。 |
|
|
返回给定多事务 ID 与当前多事务计数器之间的多事务 ID 数。 |
|
|
返回当前事务的ID。如果当前事务还没有一个ID(因为它还没有执行任何数据库更新),它将分配一个新的事务 ID;详见第 67.1 节。如果在子事务中执行,它将返回顶层事务的ID;详见第 67.3 节。 |
|
|
返回当前事务的 ID;如果尚未分配 ID,则返回 |
|
|
报告近期事务的提交状态。只要事务足够新,系统仍保留其提交状态,结果就为 |
|
|
返回当前快照,即显示哪些事务 ID 正在进行中的数据结构。快照中只包含顶层事务 ID,不显示子事务 ID;详见第 67.3 节。 |
|
|
返回快照中包含的正在进行的事务 ID集。 |
|
|
返回快照的 |
|
|
返回快照的 |
|
|
根据此快照,给定的事务 ID 是否可见(即该事务是否在生成快照之前完成)?注意,此函数无法为子事务 ID(subxid)给出正确结果;详见第 67.3 节。 |
|
|
返回指定多事务 ID 中每个成员的事务 ID 和锁模式。锁模式 |
内部事务 ID 类型 xid 为 32 位,每 40 亿次事务回卷一次。但表 9.84 中的函数,除 age、mxid_age 和 pg_get_multixact_members 外,都使用 64 位的 xid8;它在数据库安装的生命周期内不会回卷,必要时可通过强制转换得到 xid,详见第 67.1 节。pg_snapshot 存储某一时刻的事务 ID 可见性信息,组成部分见表 9.85。其文本形式为 xmin:xmax:xip_list。例如,10:20:10,14,15 表示 xmin=10、xmax=20、xip_list=10, 14, 15。
表 9.85. 快照组件
| Name | 说明 |
|---|---|
xmin |
仍然处于活动状态的最小事务 ID。所有小于xmin的事务 ID 要么已经提交且可见,要么已经回滚而失效。 |
xmax |
已完成事务中的最大事务 ID 加一。所有大于或等于xmax的事务 ID 在生成快照时尚未完成,因此不可见。 |
xip_list |
生成快照时正在进行的事务。满足xmin <= 且不在此列表中的事务 ID 在生成快照时已经完成,因此根据其提交状态,要么可见,要么失效。此列表不包含子事务的事务 ID(subxid)。 |
PostgreSQL 13 之前没有 xid8 类型,因此提供了这些函数的变体,使用 bigint 表示 64 位 XID,并相应使用独立的快照数据类型 txid_snapshot。这些旧函数的名称中包含 txid。为保持向后兼容,它们仍受支持,但可能在未来版本中删除。参见表 9.86。
表 9.86. 已弃用的事务 ID 和快照信息函数
|
函数 描述 |
|
|---|---|
|
参见 |
|
|
参见 |
|
|
参见 |
|
|
参见 |
|
|
参见 |
|
|
参见 |
|
|
参见 |
|
|
参见 |
表 9.87中的函数提供过去事务的提交时间信息。只有启用track_commit_timestamp配置选项后,这些函数才会提供有用的数据,并且只针对启用该选项之后提交的事务。提交时间戳信息会在清理过程中定期移除。
表 9.87. 已提交事务信息函数
|
函数 描述 |
|
|---|---|
|
返回事务的提交时间戳。 |
|
|
返回事务的提交时间戳和复制源。 |
|
|
返回最近提交事务的事务 ID、提交时间戳和复制源。 |
表 9.88中的函数显示在initdb期间初始化的信息,例如系统目录版本。它们也显示有关预写式日志和检查点处理的信息。这些信息适用于整个数据库集簇,而非某个特定数据库。这些函数与pg_controldata应用程序从相同来源提供大部分相同的信息。
表 9.88. 控制数据函数
表 9.89. pg_control_checkpoint 输出列
| 列名称 | 数据类型 |
|---|---|
checkpoint_lsn |
pg_lsn |
redo_lsn |
pg_lsn |
redo_wal_file |
文本 |
timeline_id |
integer |
prev_timeline_id |
integer |
full_page_writes |
boolean |
next_xid |
文本 |
next_oid |
oid |
next_multixact_id |
xid |
next_multi_offset |
xid |
oldest_xid |
xid |
oldest_xid_dbid |
oid |
oldest_active_xid |
xid |
oldest_multi_xid |
xid |
oldest_multi_dbid |
oid |
oldest_commit_ts_xid |
xid |
newest_commit_ts_xid |
xid |
checkpoint_time |
timestamp with time zone |
表 9.90. pg_control_system 输出列
| 列名称 | 数据类型 |
|---|---|
pg_control_version |
integer |
catalog_version_no |
integer |
system_identifier |
bigint |
pg_control_last_modified |
timestamp with time zone |
表 9.91. pg_control_init 输出列
| 列名称 | 数据类型 |
|---|---|
max_data_alignment |
integer |
database_block_size |
integer |
blocks_per_segment |
integer |
wal_block_size |
integer |
bytes_per_wal_segment |
integer |
max_identifier_length |
integer |
max_index_columns |
integer |
max_toast_chunk_size |
integer |
large_object_chunk_size |
integer |
float8_pass_by_value |
boolean |
data_page_checksum_version |
integer |
default_char_signedness |
boolean |
表 9.92. pg_control_recovery 输出列
| 列名称 | 数据类型 |
|---|---|
min_recovery_end_lsn |
pg_lsn |
min_recovery_end_timeline |
integer |
backup_start_lsn |
pg_lsn |
backup_end_lsn |
pg_lsn |
end_of_backup_record_required |
boolean |
表 9.93中所示的函数打印版本信息。
表 9.93. 版本信息函数
|
函数 描述 |
|
|---|---|
|
返回描述PostgreSQL 服务器版本的字符串。你还可以从server_version获得此信息,或者对于机器可读的版本,使用server_version_num。软件开发人员应该使用 |
|
|
返回一个表示PostgreSQL所使用的 Unicode 版本的字符串。 |
|
|
如果服务器在构建时启用了 ICU 支持,则返回一个表示 ICU 所使用的 Unicode 版本的字符串;否则返回 |
表 9.94中所示的函数打印有关 WAL 汇总状态的信息。参见summarize_wal。
表 9.94. WAL 汇总信息函数
|
函数 描述 |
|
|---|---|
|
返回数据目录中 |
|
|
返回由 TLI 以及起始和结束 LSN 标识的单个 WAL 汇总文件内容的信息。每一行中,如果 |
|
|
返回有关 WAL 汇总器进度的信息。如果自实例启动以来 WAL 汇总器从未运行过,则 作为一个特殊例外,如果在 |
系统目录属性
此构建的源码初始化值。字段含义参见 pg_type 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。
oid5038descrtransaction snapshottypacl_null_typlen-1typelem0typnamepg_snapshottypsendpg_snapshot_sendtyptypebtypaligndtyparray0typbyvalftypdelim','typinputpg_snapshot_intypmodin-typndims0typownerPOSTGREStyprelid0typmodout-typoutputpg_snapshot_outtyptypmod-1typanalyze-typdefault_null_typnotnullftypreceivepg_snapshot_recvtypstoragextypbasetype0typcategoryUtypcollation0typisdefinedttypnamespacepg_catalogtypsubscript-typdefaultbin_null_array_type_oid5039typispreferredfarray_type_name_pg_snapshot
版本比较
PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。
手册中的声明
PostgreSQL 17.11
pg_snapshot_xip ( pg_snapshot ) → setof xid8 返回快照中包含的正在进行的事务 ID集。; pg_snapshot_xmax ( pg_snapshot ) → xid8 返回快照的 xmax 。; pg_snapshot_xmin ( pg_snapshot ) → xid8 返回快照的 xmin 。; pg_visible_in_snapshot ( xid8 , pg_snapshot ) → boolean 根据此快照,给定的事务 ID 是否 可见 (即该事务是否在生成快照之前完成)?注意,此函数无法为子事务 ID(subxid)给出正确结果;详见 第 66.3 节 。
PostgreSQL 18.6
pg_snapshot_xip ( pg_snapshot ) → setof xid8 返回快照中包含的正在进行的事务 ID集。; pg_snapshot_xmax ( pg_snapshot ) → xid8 返回快照的 xmax 。; pg_snapshot_xmin ( pg_snapshot ) → xid8 返回快照的 xmin 。; pg_visible_in_snapshot ( xid8 , pg_snapshot ) → boolean 根据此快照,给定的事务 ID 是否 可见 (即该事务是否在生成快照之前完成)?注意,此函数无法为子事务 ID(subxid)给出正确结果;详见 第 67.3 节 。
这些构建的文档也有差异,请查看对应版本的手册定义。
文档与源码
- 构建
- 18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
- 指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
相关条目
全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。