↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 数据类型 / 其他内置类型

txid_snapshot

用户级事务 ID 快照(已弃用;参见 pg_snapshot)

当前查看 PostgreSQL 18.6。

PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。

定义

用户级事务 ID 快照(已弃用;参见 pg_snapshot)

txid_snapshot
目录名称
pg_catalog.txid_snapshot
类型 OID
2970
类型种类
基础类型
声明长度
变长(varlena)
存储策略
扩展
输入函数
txid_snapshot_in
输出函数
txid_snapshot_out
手册中的声明
txid_snapshot_xip ( txid_snapshot ) → setof bigint 参见 pg_snapshot_xip() 。
手册中的声明
txid_snapshot_xmax ( txid_snapshot ) → bigint 参见 pg_snapshot_xmax() 。
手册中的声明
txid_snapshot_xmin ( txid_snapshot ) → bigint 参见 pg_snapshot_xmin() 。
手册中的声明
txid_visible_in_snapshot ( bigint , txid_snapshot ) → boolean 参见 pg_visible_in_snapshot() 。

中文手册

阅读完整手册章节

阅读来源定义

9.27. 系统信息函数和操作符

本节描述的函数用于获取有关PostgreSQL安装的各种信息。

表 9.71列出了多个用于提取会话和系统信息的函数。

除了本节列出的函数外,还有许多与统计系统相关的函数,这些函数也提供系统信息。有关更多信息,请参见第 27.2.26 节。

表 9.71. 会话信息函数

函数

描述

current_catalog → name

current_database () → name

返回当前数据库的名称。(SQL 标准将数据库称为“目录(catalogs)”,因此current_catalog是标准中的写法。)

current_query () → text

返回客户端提交的当前正在执行的查询文本(可能包含多条语句)。

current_role → name

这个等同于 current_user。

current_schema → name

current_schema () → name

返回在搜索路径中的第一个模式的名称(如果搜索路径为空则返回空值)。这个模式将用于没有指定目标模式就创建的任何表或其他已命名对象。

current_schemas ( include_implicit boolean ) → name[]

返回当前有效搜索路径中所有模式名称的数组,按优先级排序。(当前search_path设置中不对应于已存在且可搜索的模式的项会被省略。)如果布尔参数为true,结果还会包含pg_catalog等隐式搜索的系统模式。

current_user → name

返回当前执行上下文的用户名。

inet_client_addr () → inet

返回当前客户端的 IP 地址;如果当前连接通过 Unix 域套接字建立,则返回NULL。

inet_client_port () → integer

返回当前客户端的IP端口号,如果当前连接是通过Unix 域套接字则返回NULL。

inet_server_addr () → inet

返回服务器接受当前连接的IP地址,如果当前连接是通过Unix 域套接字则返回NULL。

inet_server_port () → integer

返回服务器接受当前连接的IP端口号,如果当前连接是通过Unix 域套接字则返回NULL。

pg_backend_pid () → integer

返回附加到当前会话的服务器进程的进程ID。

pg_blocking_pids ( integer ) → integer[]

返回一个数组,包含阻止指定进程 ID 对应的服务器进程获取锁的会话进程 ID;如果不存在这样的服务器进程,或该进程未被阻塞,则返回空数组。

一个服务器进程在以下情况下会阻塞另一个进程:它持有与后者锁请求冲突的锁,称为硬阻塞;或者它正在等待一个与后者锁请求冲突的锁,并在等待队列中排在后者前面,称为软阻塞。使用并行查询时,即使实际持锁或等待锁的是子工作进程,结果也始终列出客户端可见的进程 ID,即 pg_backend_pid 的结果。因此,结果中可能出现重复 PID。此外,预备事务持有冲突锁时,用进程 ID 零表示。

频繁调用这个函数可能会对数据库性能产生一些影响,因为它需要在短时间内独占访问锁管理器的共享状态。

pg_conf_load_time () → timestamp with time zone

返回服务器配置文件最近一次加载的时间。如果当时当前会话已经存在,则返回该会话自身重新读取配置文件的时间(因此不同会话中的返回时间会略有不同)。否则,返回 postmaster 进程重新读取配置文件的时间。

pg_current_logfile ( [ text ] ) → text

返回当前由日志收集器使用的日志文件的路径名。路径包括log_directory目录和单独的日志文件名。如果日志收集器已禁用,则结果为NULL。当存在多个日志文件,每个以不同格式存在时,不带参数的pg_current_logfile返回有序列表中找到的第一个格式的文件路径:stderr,csvlog,jsonlog。如果没有任何日志文件具有这些格式,则返回NULL。要请求有关特定日志文件格式的信息,请将csvlog,jsonlog或stderr作为可选参数的值。如果请求的日志格式未在log_destination中配置,则结果为NULL。结果反映current_logfiles文件的内容。

默认情况下,此函数仅限超级用户和具有pg_monitor角色权限的角色使用,但可以向其他用户授予EXECUTE权限以运行它。

pg_get_loaded_modules () → setof record ( module_name text, version text, file_name text )

返回当前服务器会话已加载的可加载模块列表。除非模块作者通过 PG_MODULE_MAGIC_EXT 宏提供了值,否则 module_name 和 version 字段均为 NULL。file_name 字段给出模块(共享库)的文件名。

pg_my_temp_schema () → oid

返回当前会话的临时模式的OID,如果没有则返回0(因为它没有创建任何临时表)。

pg_is_other_temp_schema ( oid ) → boolean

如果给定的OID是另一个会话的临时模式的OID则返回真。(这可能是有用的,例如,在目录显示中排除其他会话的临时表。)

pg_jit_available () → boolean

如果JIT编译器扩展可用(参见第 30 章),并且jit配置参数设置为on,则返回真。

pg_numa_available () → boolean

如果服务器在编译时启用了 NUMA 支持,则返回真。

pg_listening_channels () → setof text

返回当前会话正在侦听的异步通知通道的名称集。

pg_notification_queue_usage () → double precision

返回待处理通知当前占用的空间占异步通知队列最大容量的比例(0–1)。更多信息请参见LISTEN和NOTIFY。

pg_postmaster_start_time () → timestamp with time zone

返回服务器启动时的时间。

pg_safe_snapshot_blocking_pids ( integer ) → integer[]

返回一个数组,包含阻止指定进程 ID 对应的服务器进程获取安全快照的会话进程 ID;如果不存在这样的服务器进程,或该进程未被阻塞,则返回空数组。

运行SERIALIZABLE事务的会话会阻止SERIALIZABLE READ ONLY DEFERRABLE事务获取快照,直到后者确定可以安全地避免获取谓词锁。关于可序列化和可延迟事务的更多信息,请参见第 13.2.3 节。

频繁调用这个函数可能会对数据库性能产生一些影响,因为它需要在短时间内访问谓词锁管理器的共享状态。

pg_trigger_depth () → integer

返回PostgreSQL触发器的当前嵌套层级(如果不是从触发器内部直接或间接调用,则为 0)。

session_user → name

返回会话用户名。

system_user → text

返回用户在被分配数据库角色之前,于认证周期中提供的认证方法和身份(如果有)。结果表示为 auth_method:identity;如果用户未被认证(例如使用了Trust 认证),则返回 NULL。

user → name

这个相当于 current_user。


注意

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. 访问权限查询函数

函数

描述

has_any_column_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

用户是否对表的至少一列具有权限?如果拥有整个表的权限,或至少一列获得了该权限的列级授权,则返回真。允许的权限类型为SELECT、INSERT、UPDATE和REFERENCES。

has_column_privilege ( [ user name or oid, ] table text or oid, column text or smallint, privilege text ) → boolean

用户对指定的表列有权限么?如果对整个表持有权限,或者对列授予了列级别的权限,则会成功。可以通过名称或属性编号(pg_attribute.attnum)指定列。允许的权限类型为SELECT、INSERT、UPDATE 和 REFERENCES。

has_database_privilege ( [ user name or oid, ] database text or oid, privilege text ) → boolean

用户对数据库有权限吗?允许的权限类型为CREATE、CONNECT、TEMPORARY 和 TEMP(相当于 TEMPORARY)。

has_foreign_data_wrapper_privilege ( [ user name or oid, ] fdw text or oid, privilege text ) → boolean

用户是否具有外部数据包装器权限?唯一允许的权限类型为USAGE。

has_function_privilege ( [ user name or oid, ] function text or oid, privilege text ) → boolean

用户对函数有权限吗?唯一允许的权限类型是EXECUTE。

当通过名称而不是OID指定函数时,允许的输入与regprocedure数据类型相同(参见第 8.19 节)。一个示例为:

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');

has_language_privilege ( [ user name or oid, ] language text or oid, privilege text ) → boolean

用户对语言有权限吗?唯一允许的权限类型是USAGE。

has_largeobject_privilege ( [ user name or oid, ] largeobject oid, privilege text ) → boolean

用户是否拥有大对象的权限?可用的权限类型是 SELECT 和 UPDATE。

has_parameter_privilege ( [ user name or oid, ] parameter text, privilege text ) → boolean

用户是否具有配置参数的权限?参数名称不区分大小写。允许的权限类型为SET和ALTER SYSTEM。

has_schema_privilege ( [ user name or oid, ] schema text or oid, privilege text ) → boolean

用户对模式有权限吗?允许的权限类型是CREATE 和USAGE。

has_sequence_privilege ( [ user name or oid, ] sequence text or oid, privilege text ) → boolean

用户是否具有序列权限?允许的权限类型为USAGE、SELECT和UPDATE。

has_server_privilege ( [ user name or oid, ] server text or oid, privilege text ) → boolean

用户是否对外部服务器有权限?唯一允许的权限类型是USAGE。

has_table_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

用户对表有权限吗?允许的权限类型有SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER和MAINTAIN。

has_tablespace_privilege ( [ user name or oid, ] tablespace text or oid, privilege text ) → boolean

用户对表空间有权限吗?唯一允许的权限类型是CREATE。

has_type_privilege ( [ user name or oid, ] type text or oid, privilege text ) → boolean

用户对数据类型有权限吗?唯一允许的权限类型是 USAGE。当通过名称而不是OID指定类型时,允许的输入与regtype数据类型相同(参见第 8.19 节)。

pg_has_role ( [ user name or oid, ] role text or oid, privilege text ) → boolean

用户是否具有角色权限?允许的权限类型为MEMBER、USAGE和SET。MEMBER表示对该角色的直接或间接成员资格,而不考虑由此授予的具体权限。USAGE表示该角色的权限是否无需执行SET ROLE即可立即使用,而SET表示是否可以使用SET ROLE命令切换到该角色。任一权限类型后面都可以附加WITH ADMIN OPTION或WITH GRANT OPTION,用于测试是否持有 ADMIN 权限(这六种写法测试的都是同一件事)。此函数不允许将user设置为public这一特殊情况,因为 PUBLIC 伪角色永远不能成为实际角色的成员。

row_security_active ( table text or oid ) → boolean

在当前用户和当前环境的上下文中,指定表的行级安全是否生效?


表 9.73列出了aclitem类型可用的操作符;该类型是访问权限在系统目录中的表示形式。有关如何解读访问权限值的信息,请参见第 5.8 节。

表 9.73. aclitem 操作符

操作符

描述

示例

aclitem = aclitem → boolean

两个aclitem是否相等?(注意,aclitem类型没有通常的整套比较操作符,而只支持相等比较。因此,aclitem数组也只能进行相等比较。)

'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem → f

aclitem[] @> aclitem → boolean

数组是否包含指定的权限?(如果数组中存在一个条目,其被授权者和授权者与该aclitem相同,且至少包含指定的全部权限,则返回真。)

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitem → t


表 9.74列出了一些用于管理aclitem类型的其他函数。

表 9.74. aclitem 函数

函数

描述

acldefault ( type "char", ownerId oid ) → aclitem[]

构造一个aclitem数组,保存类型为type、属于 OID 为ownerId的角色的对象的默认访问权限。当对象的ACL条目为空值时,会采用这些访问权限。(默认访问权限见第 5.8 节。)type参数必须为以下值之一:'c' 表示COLUMN,'r' 表示TABLE和类似表的对象,'s' 表示SEQUENCE,'d' 表示DATABASE,'f' 表示FUNCTION或PROCEDURE,'l' 表示LANGUAGE,'L' 表示LARGE OBJECT,'n' 表示SCHEMA,'p' 表示PARAMETER,'t' 表示TABLESPACE,'F' 表示FOREIGN DATA WRAPPER,'S' 表示FOREIGN SERVER,'T' 表示TYPE或DOMAIN。

aclexplode ( aclitem[] ) → setof record ( grantor oid, grantee oid, privilege_type text, is_grantable boolean )

以行集的形式返回aclitem数组。如果被授权者是伪角色 PUBLIC,则在grantee列中用零表示。每项授予的权限表示为SELECT、INSERT等(完整列表见表 5.1)。注意,每项权限都会拆成单独的一行,因此privilege_type列中只会出现一个关键字。

makeaclitem ( grantee oid, grantor oid, privileges text, is_grantable boolean ) → aclitem

使用给定的属性构造aclitem。privileges是以逗号分隔的权限名列表,例如SELECT、INSERT等,列出的所有权限都会设置在结果中。(权限字符串不区分大小写,权限名之间允许有额外的空白,但权限名内部不允许。)


表 9.75列出了判断某个特定对象是否可见的函数,其判断依据是当前模式搜索路径。例如,如果表所在的模式位于搜索路径中,并且在搜索路径的更前面没有同名表,就称该表可见。这等价于说,可以只通过表名引用该表,而不必显式地用模式限定。因此,要列出所有可见表的名称:

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

对于函数和操作符,只要搜索路径中更靠前的位置没有对象具有与被检查对象相同的名称和参数数据类型,就称被检查对象可见。对于操作符类和操作符族,会同时考虑名称及关联的索引访问方法。

表 9.75. 模式可见性查询函数

函数

描述

pg_collation_is_visible ( collation oid ) → boolean

排序规则在搜索路径中可见吗?

pg_conversion_is_visible ( conversion oid ) → boolean

转换在搜索路径中可见吗?

pg_function_is_visible ( function oid ) → boolean

函数在搜索路径中可见吗?(这也适用于过程和聚合。)

pg_opclass_is_visible ( opclass oid ) → boolean

操作符类在搜索路径中可见吗?

pg_operator_is_visible ( operator oid ) → boolean

操作符在搜索路径中可见吗?

pg_opfamily_is_visible ( opclass oid ) → boolean

操作符族在搜索路径中可见吗?

pg_statistics_obj_is_visible ( stat oid ) → boolean

统计对象在搜索路径中可见吗?

pg_table_is_visible ( table oid ) → boolean

表在搜索路径中可见吗?(这适用于所有类型的关系,包括视图、物化视图、索引、序列和外部表。)

pg_ts_config_is_visible ( config oid ) → boolean

全文检索配置是否在搜索路径中可见?

pg_ts_dict_is_visible ( dict oid ) → boolean

全文检索词典是否在搜索路径中可见?

pg_ts_parser_is_visible ( parser oid ) → boolean

全文检索解析器是否在搜索路径中可见?

pg_ts_template_is_visible ( template oid ) → boolean

全文检索模板是否在搜索路径中可见?

pg_type_is_visible ( type oid ) → boolean

类型(或域)在搜索路径中可见吗?


所有这些函数都需要用对象 OID 标识要检查的对象。如果想按名称测试对象,使用 OID 别名类型会很方便(regclass,regtype,regprocedure,regoperator,regconfig,或regdictionary),例如:

SELECT pg_type_is_visible('myschema.widget'::regtype);

注意,用这种方式测试不带模式限定的类型名并没有太大意义:只要该名称能够被识别,它就必然可见。

表 9.76列出从系统目录中提取信息的函数。

表 9.76. 系统目录信息函数

函数

描述

format_type ( type oid, typemod integer ) → text

返回由其类型OID和可能的类型修饰符标识的数据类型的SQL名称。如果没有已知的类型修饰符,则传递NULL值给类型修饰符。

pg_basetype ( regtype ) → regtype

返回由类型 OID 标识的域的基础类型 OID。如果参数是非域类型的 OID,则原样返回该参数。如果参数不是有效的类型 OID,则返回 NULL。如果存在域依赖链,则递归查找,直到找到基础类型。

假设执行了CREATE DOMAIN mytext AS text:

pg_basetype('mytext'::regtype) → text

pg_char_to_encoding ( encoding name ) → integer

将提供的编码名称转换为表示在某些系统目录表中使用的内部标识符的整数。如果提供了未知的编码名称,则返回-1。

pg_encoding_to_char ( encoding integer ) → name

将在某些系统目录表中用作编码内部标识符的整数转换为可读的字符串。如果提供了无效的编码编号,则返回空字符串。

pg_get_catalog_foreign_keys () → setof record ( fktable regclass, fkcols text[], pktable regclass, pkcols text[], is_array boolean, is_opt boolean )

返回一组记录,描述存在于PostgreSQL系统目录中的外键关系。fktable 列包含引用目录的名称,fkcols列包含引用列的名称。类似地,pktable列包含被引用目录的名称,而pkcols列包含被引用列的名称。如果is_array为真,则最后一个引用列是一个数组,其每个元素都应该与被引用目录中的某个条目匹配。如果is_opt为真,则允许引用列包含零而不是有效引用。

pg_get_constraintdef ( constraint oid [, pretty boolean ] ) → text

重建约束的创建命令。(这是反编译重建的结果,并非命令的原始文本。)

pg_get_expr ( expr pg_node_tree, relation oid [, pretty boolean ] ) → text

反编译存储在系统目录中的表达式的内部形式,例如列的默认值。如果表达式可能包含 Var 节点,请将它们所引用的关系的 OID 指定为第二个参数;如果预计不含 Var 节点,传入零即可。

pg_get_functiondef ( func oid ) → text

重建函数或过程的创建命令。(这是反编译重建的结果,并非命令的原始文本。)结果是一条完整的CREATE OR REPLACE FUNCTION或CREATE OR REPLACE PROCEDURE语句。

pg_get_function_arguments ( func oid ) → text

重建函数或过程的参数列表,采用其在CREATE FUNCTION中应有的形式(包括默认值)。

pg_get_function_identity_arguments ( func oid ) → text

重建标识函数或过程所需的参数列表,采用其在ALTER FUNCTION等命令中应有的形式。这种形式省略默认值。

pg_get_function_result ( func oid ) → text

重建函数的RETURNS子句,采用其在CREATE FUNCTION中应有的形式。对于过程,返回NULL。

pg_get_indexdef ( index oid [, column integer, pretty boolean ] ) → text

重建索引的创建命令。(这是反编译重建的结果,并非命令的原始文本。)如果提供了column而且不为零,则只重建该列的定义。

pg_get_keywords () → setof record ( word text, catcode "char", barelabel boolean, catdesc text, baredesc text )

返回一组记录,描述服务器识别的 SQL 关键字。word 列为关键字本身。catcode 列为分类代码:U 表示非保留关键字,C 表示可作列名的关键字,T 表示可作类型名或函数名的关键字,R 表示完全保留的关键字。如果关键字可直接作为 SELECT 列表中的“裸”列标签,barelabel 为 true;如果只能出现在 AS 之后,则为 false。catdesc 列以可能经过本地化的字符串描述关键字分类;baredesc 列以可能经过本地化的字符串描述关键字用作列标签的状态。

pg_get_partition_constraintdef ( table oid ) → text

重建分区约束的定义。(这是反编译重建的结果,并非命令的原始文本。)

pg_get_partkeydef ( table oid ) → text

重建分区表的分区键定义,格式与 CREATE TABLE 的 PARTITION BY 子句中的写法相同。(这是反编译重建的定义,并非命令原文。)

pg_get_ruledef ( rule oid [, pretty boolean ] ) → text

重建规则的创建命令。(这是反编译重建的结果,并非命令的原始文本。)

pg_get_serial_sequence ( table text, column text ) → text

返回与列相关联的序列名称,如果没有序列与该列相关联则返回NULL。如果列是标识列,则关联序列是在内部为该列创建的序列。对于使用一种 serial 类型(serial、smallserial、bigserial)创建的列,它是为该 serial 列定义创建的序列。在后一种情况下,可以使用ALTER SEQUENCE OWNED BY修改或删除关联。(这个函数可能应该被称为pg_get_owned_sequence;它的当前名称反映了它在历史上曾与 serial 类型的列一起使用。)第一个参数是具有可选模式的表名,第二个参数是列名。由于第一个参数可能包含模式名和表名,因此按照通常的SQL规则解析它,这意味着默认情况下它是小写的。第二个参数只是一个列名,按照字面来处理,因此保留了它的大小写。结果经过了适当的格式化,可以传递给序列函数(参见第 9.17 节)。

典型用法是读取标识列或 serial 列所用序列的当前值,例如:

SELECT currval(pg_get_serial_sequence('sometable', 'id'));

pg_get_statisticsobjdef ( statobj oid ) → text

重建扩展统计对象的创建命令。(这是反编译重建的结果,并非命令的原始文本。)

pg_get_triggerdef ( trigger oid [, pretty boolean ] ) → text

重建触发器的创建命令。(这是反编译重建的结果,并非命令的原始文本。)

pg_get_userbyid ( role oid ) → name

根据OID返回角色名。

pg_get_viewdef ( view oid [, pretty boolean ] ) → text

重建定义视图或物化视图的SELECT命令。(这是反编译重建的结果,并非命令的原始文本。)

pg_get_viewdef ( view oid, wrap_column integer ) → text

重建定义视图或物化视图的SELECT命令。(这是反编译重建的结果,并非命令的原始文本。)这种形式始终启用美化输出,并将长行折行,尽量使每行长度小于指定列数。

pg_get_viewdef ( view text [, pretty boolean ] ) → text

根据视图的文本名称而不是其 OID,重建定义视图或物化视图的SELECT命令。(此形式已弃用;请使用 OID 变体。)

pg_index_column_has_property ( index regclass, column integer, property text ) → boolean

测试一个索引列是否具有指定名称的属性。表 9.77列出了常用索引列属性。(注意,扩展访问方法可以为其索引定义额外的属性名。)如果属性名未知或不适用于特定对象,或者OID或列号不能识别有效的对象,则返回NULL。

pg_index_has_property ( index regclass, property text ) → boolean

测试一个索引是否具有指定名称的属性。表 9.78列出了常用的索引属性。(注意,扩展访问方法可以为其索引定义额外的属性名。)如果属性名未知或不适用于特定对象,或者OID不能识别有效的对象,则返回NULL。

pg_indexam_has_property ( am oid, property text ) → boolean

测试索引访问方法是否具有指定名称的属性。访问方法属性如表 9.79所示。如果属性名未知或不适用于特定对象,或者OID不能识别有效的对象,则返回NULL。

pg_options_to_table ( options_array text[] ) → setof record ( option_name text, option_value text )

返回源自pg_class.reloptions 或 pg_attribute.attoptions的值表示的存储选项集。

pg_settings_get_flags ( guc text ) → text[]

返回与给定 GUC 关联的标志数组;如果该 GUC 不存在,则返回NULL。如果 GUC 存在但没有要显示的标志,则结果为空数组。此函数仅公开表 9.80中列出的最有用的标志。

pg_tablespace_databases ( tablespace oid ) → setof oid

返回在指定表空间中存储了对象的数据库 OID 集合。如果此函数返回任何行,则说明该表空间不为空,不能删除。要查看存放在该表空间中的具体对象,需要连接到pg_tablespace_databases标识的数据库,并查询它们的pg_class系统目录。

pg_tablespace_location ( tablespace oid ) → text

返回表空间所在的文件系统路径。

pg_typeof ( "any" ) → regtype

返回所传入值的数据类型的 OID。这有助于排查问题或动态构造 SQL 查询。函数声明的返回类型是regtype,它是一种 OID 别名类型(参见第 8.19 节);这意味着它在比较时与 OID 相同,但显示为类型名。

pg_typeof(33) → integer

COLLATION FOR ( "any" ) → text

返回传入值的排序规则名称。必要时会为返回的名称加上引号和模式限定。如果无法为参数表达式推导出排序规则,则返回NULL。如果参数不属于支持排序规则的数据类型,则报错。

collation for ('foo'::text) → "default"

collation for ('foo' COLLATE "de_DE") → "de_DE"

to_regclass ( text ) → regclass

将文本关系名转换为它的OID。通过将字符串类型转换为regclass可以得到类似的结果(参见第 8.19 节);但是,如果没有找到名称,这个函数将返回NULL而不会抛出错误。

to_regcollation ( text ) → regcollation

将文本排序规则名称转换为它的OID。通过将字符串类型转换为regcollation(参见第 8.19 节)可以得到类似的结果;但是,如果没有找到名称,这个函数将返回NULL而不会抛出错误。

to_regnamespace ( text ) → regnamespace

将文本模式名转换为它的OID。通过将字符串转换为regnamespace类型(参见第 8.19 节)可以得到类似的结果;但是,如果没有找到名称,这个函数将返回NULL而不会抛出错误。

to_regoper ( text ) → regoper

将文本操作符名称转换为它的OID。通过将字符串类型转换为regoper(参见第 8.19 节)可以得到类似的结果;但是,如果找不到名称或名称有多义性,该函数将返回NULL而不会抛出错误。

to_regoperator ( text ) → regoperator

将文本操作符名称(带有参数类型)转换为其OID。通过将字符串转换为regoperator类型(参见第 8.19 节)可以得到类似的结果;但是,如果没有找到名称,这个函数将返回NULL而不会抛出错误。

to_regproc ( text ) → regproc

将文本函数或过程名转换为其OID。通过将字符串转换为regproc类型(参见第 8.19 节)可以得到类似的结果;但是,如果找不到名称或名称有多义性,该函数将返回NULL而不会抛出错误。

to_regprocedure ( text ) → regprocedure

将文本函数或过程名(带有参数类型)转换为其OID。通过将字符串类型转换为regprocedure可以得到类似的结果(参见第 8.19 节);但是,如果没有找到名称,这个函数将返回NULL而不会抛出错误。

to_regrole ( text ) → regrole

将文本角色名转换为它的OID。通过将字符串类型转换为regrole可以得到类似的结果(参见第 8.19 节);但是,如果没有找到名称,这个函数将返回NULL而不会抛出错误。

to_regtype ( text ) → regtype

解析文本字符串,从中提取可能的类型名,并将该名称转换为类型 OID。字符串中的语法错误会导致报错;但如果字符串是语法有效的类型名,只是在系统目录中找不到该类型,结果就是 NULL。将字符串转换为 regtype 类型也能得到类似的结果(参见第 8.19 节),区别在于类型转换会在找不到名称时报错。

to_regtypemod ( text ) → integer

解析文本字符串,从中提取可能的类型名称,并转换其类型修饰符(如果有)。字符串中的语法错误会引发错误;但如果字符串是语法有效的类型名称,只是在系统目录中找不到,则结果为NULL。如果没有类型修饰符,则结果为-1。

to_regtypemod可以与to_regtype结合,为format_type生成适当的输入,从而将表示类型名称的字符串转换为规范形式。

format_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)')) → character varying(32)


大多数重建(反编译)数据库对象的函数都带有可选的 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. 对象信息和寻址函数

函数

描述

pg_get_acl ( classid oid, objid oid, objsubid integer ) → aclitem[]

返回由系统目录 OID、对象 OID 和子对象 ID 指定的数据库对象的ACL。对于未定义的对象,此函数返回NULL值。

pg_describe_object ( classid oid, objid oid, objsubid integer ) → text

返回数据库对象的文本描述,对象由系统目录 OID、对象 OID 和子对象 ID 指定(例如表中的列号;引用整个对象时,子对象 ID 为零)。该描述供人阅读,并可能根据服务器配置被翻译。这对于确定pg_depend系统目录中所引用对象的标识尤其有用。对于未定义的对象,此函数返回NULL。

pg_identify_object ( classid oid, objid oid, objsubid integer ) → record ( type text, schema text, name text, identity text )

返回一行,其中包含足以唯一标识数据库对象的信息,该对象由系统目录 OID、对象 OID 和子对象 ID 指定。这些信息供机器读取,永远不会被翻译。type标识数据库对象的类型;schema是对象所属的模式名,对于不属于模式的对象类型则为NULL;如果对象名(以及适用时的模式名)足以唯一标识该对象,name就是对象名,并在必要时加引号,否则为NULL;identity是完整的对象标识,其具体格式取决于对象类型,格式中的每个名称都会根据需要加上模式限定和引号。未定义的对象以NULL值标识。

pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) → record ( type text, object_names text[], object_args text[] )

返回一行,其中包含足以唯一标识数据库对象的信息,该对象由系统目录 OID、对象 OID 和子对象 ID 指定。返回的信息与当前服务器无关,也就是说,它也能用于标识另一台服务器上名称相同的对象。type标识数据库对象的类型;object_names和object_args是 text 数组,共同构成对该对象的引用。将这三个值传给pg_get_object_address可以获得对象的内部地址。

pg_get_object_address ( type text, object_names text[], object_args text[] ) → record ( classid oid, objid oid, objsubid integer )

返回一行,其中包含足以唯一标识数据库对象的信息,该对象由类型代码、对象名称数组和参数数组指定。返回的值就是pg_depend等系统目录中使用的值;它们可以传给pg_describe_object或pg_identify_object等其他系统函数。classid是包含该对象的系统目录的 OID;objid是对象自身的 OID;objsubid是子对象 ID,没有子对象时为零。此函数执行pg_identify_object_as_address的逆操作。未定义的对象以NULL值标识。


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. 注释信息函数

函数

描述

col_description ( table oid, column integer ) → text

返回表列的注释,列由所属表的 OID 和列号指定。(obj_description不能用于表列,因为列没有自身的 OID。)

obj_description ( object oid, catalog name ) → text

根据数据库对象的 OID 和所属系统目录名返回其注释。例如,obj_description(123456, 'pg_class') 返回 OID 为 123456 的表的注释。

obj_description ( object oid ) → text

返回仅由其 OID 指定的数据库对象的注释。此形式已弃用,因为无法保证 OID 在不同系统目录之间唯一,因而可能返回错误的注释。

shobj_description ( object oid, catalog name ) → text

返回共享数据库对象的注释,对象由其 OID 和所在系统目录的名称指定。此函数与obj_description类似,但用于获取共享对象(即数据库、角色和表空间)的注释。有些系统目录由数据库集簇中的所有数据库全局共享,其中对象的描述也全局存储。


表 9.83中所示的函数有助于检查待输入数据的有效性。

表 9.83. 数据有效性检查函数

函数

描述

示例

pg_input_is_valid ( string text, type text ) → boolean

测试给定的string是否是指定数据类型的有效输入,返回 true 或 false。

只有当该数据类型的输入函数已经更新为把无效输入报告为一种“软”错误时,此函数才能按预期工作。否则,无效输入将中止事务,就像直接将该字符串转换为该类型一样。

pg_input_is_valid('42', 'integer') → t

pg_input_is_valid('42000000000', 'integer') → f

pg_input_is_valid('1234.567', 'numeric(7,4)') → f

pg_input_error_info ( string text, type text ) → record ( message text, detail text, hint text, sql_error_code text )

测试给定的string是否是指定数据类型的有效输入;如果不是,则返回本应抛出的错误详情。如果输入有效,则结果为 NULL。输入参数与pg_input_is_valid 相同。

只有当该数据类型的输入函数已经更新为把无效输入报告为一种“软”错误时,此函数才能按预期工作。否则,无效输入将中止事务,就像直接将该字符串转换为该类型一样。

SELECT * FROM pg_input_error_info('42000000000', 'integer') →

                       message                        | detail | hint | sql_error_code
------------------------------------------------------+--------+------+----------------
 value "42000000000" is out of range for type integer |        |      | 22003

表 9.84中展示的函数以一种可导出的形式提供了服务器事务信息。这些函数的主要用途是判断在两个快照之间哪些事务被提交。

表 9.84. 事务 ID 和快照信息函数

函数

描述

age ( xid ) → integer

返回给定事务 ID 与当前事务计数器之间的事务数。

mxid_age ( xid ) → integer

返回给定多事务 ID 与当前多事务计数器之间的多事务 ID 数。

pg_current_xact_id () → xid8

返回当前事务的ID。如果当前事务还没有一个ID(因为它还没有执行任何数据库更新),它将分配一个新的事务 ID;详见第 67.1 节。如果在子事务中执行,它将返回顶层事务的ID;详见第 67.3 节。

pg_current_xact_id_if_assigned () → xid8

返回当前事务的 ID;如果尚未分配 ID,则返回NULL。(如果事务本来可能是只读的,最好使用此变体,以免不必要地消耗 XID。)如果在子事务中执行,则返回顶层事务 ID。

pg_xact_status ( xid8 ) → text

报告近期事务的提交状态。只要事务足够新,系统仍保留其提交状态,结果就为in progress、committed或aborted。如果事务已足够旧,系统中不再有对它的引用,且提交状态信息已被丢弃,则返回NULL。例如,在COMMIT进行过程中应用与数据库服务器断开连接时,应用可以用此函数判断事务是提交了还是中止了。注意,预备事务被报告为in progress;如果需要确定某个事务 ID 是否为预备事务,应用必须检查pg_prepared_xacts。

pg_current_snapshot () → pg_snapshot

返回当前快照,即显示哪些事务 ID 正在进行中的数据结构。快照中只包含顶层事务 ID,不显示子事务 ID;详见第 67.3 节。

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 节。

pg_get_multixact_members ( multixid xid ) → setof record ( xid xid, mode text )

返回指定多事务 ID 中每个成员的事务 ID 和锁模式。锁模式 forupd、fornokeyupd、sh 和 keysh 分别对应于第 13.3.2 节中描述的行级锁 FOR UPDATE、FOR NO KEY UPDATE、FOR SHARE 和 FOR KEY SHARE。另有两种多事务特有的模式:nokeyupd 用于不修改键列的更新,upd 用于修改键列的更新或删除。


内部事务 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 <= X < xmax且不在此列表中的事务 ID 在生成快照时已经完成,因此根据其提交状态,要么可见,要么失效。此列表不包含子事务的事务 ID(subxid)。

PostgreSQL 13 之前没有 xid8 类型,因此提供了这些函数的变体,使用 bigint 表示 64 位 XID,并相应使用独立的快照数据类型 txid_snapshot。这些旧函数的名称中包含 txid。为保持向后兼容,它们仍受支持,但可能在未来版本中删除。参见表 9.86。

表 9.86. 已弃用的事务 ID 和快照信息函数

函数

描述

txid_current () → bigint

参见 pg_current_xact_id()。

txid_current_if_assigned () → bigint

参见 pg_current_xact_id_if_assigned()。

txid_current_snapshot () → txid_snapshot

参见 pg_current_snapshot()。

txid_snapshot_xip ( txid_snapshot ) → setof bigint

参见 pg_snapshot_xip()。

txid_snapshot_xmax ( txid_snapshot ) → bigint

参见 pg_snapshot_xmax()。

txid_snapshot_xmin ( txid_snapshot ) → bigint

参见 pg_snapshot_xmin()。

txid_visible_in_snapshot ( bigint, txid_snapshot ) → boolean

参见 pg_visible_in_snapshot()。

txid_status ( bigint ) → text

参见 pg_xact_status()。


表 9.87中的函数提供过去事务的提交时间信息。只有启用track_commit_timestamp配置选项后,这些函数才会提供有用的数据,并且只针对启用该选项之后提交的事务。提交时间戳信息会在清理过程中定期移除。

表 9.87. 已提交事务信息函数

函数

描述

pg_xact_commit_timestamp ( xid ) → timestamp with time zone

返回事务的提交时间戳。

pg_xact_commit_timestamp_origin ( xid ) → record ( timestamp timestamp with time zone, roident oid)

返回事务的提交时间戳和复制源。

pg_last_committed_xact () → record ( xid xid, timestamp timestamp with time zone, roident oid )

返回最近提交事务的事务 ID、提交时间戳和复制源。


表 9.88中的函数显示在initdb期间初始化的信息,例如系统目录版本。它们也显示有关预写式日志和检查点处理的信息。这些信息适用于整个数据库集簇,而非某个特定数据库。这些函数与pg_controldata应用程序从相同来源提供大部分相同的信息。

表 9.88. 控制数据函数

函数

描述

pg_control_checkpoint () → record

返回有关当前检查点状态的信息,如表 9.89所展示。

pg_control_system () → record

返回有关当前控制文件状态的信息,如表 9.90所展示。

pg_control_init () → record

返回有关集簇初始化状态的信息,如表 9.91所展示。

pg_control_recovery () → record

返回有关恢复状态的信息,如表 9.92所展示。


表 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. 版本信息函数

函数

描述

version () → text

返回描述PostgreSQL 服务器版本的字符串。你还可以从server_version获得此信息,或者对于机器可读的版本,使用server_version_num。软件开发人员应该使用server_version_num(自 8.2 起可用)或PQserverVersion,而不是解析文本版本。

unicode_version () → text

返回一个表示PostgreSQL所使用的 Unicode 版本的字符串。

icu_unicode_version () → text

如果服务器在构建时启用了 ICU 支持,则返回一个表示 ICU 所使用的 Unicode 版本的字符串;否则返回 NULL。


表 9.94中所示的函数打印有关 WAL 汇总状态的信息。参见summarize_wal。

表 9.94. WAL 汇总信息函数

函数

描述

pg_available_wal_summaries () → setof record ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn )

返回数据目录中 pg_wal/summaries下现有 WAL 汇总文件的信息。每个 WAL 汇总文件返回一行。每个文件都汇总了指定 TLI 上、指定 LSN 范围内的 WAL。该函数可用于判断服务器上是否存在足够的 WAL 汇总,从而基于某个已知起始 LSN 的先前备份执行增量备份。

pg_wal_summary_contents ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn ) → setof record ( relfilenode oid, reltablespace oid, reldatabase oid, relforknumber smallint, relblocknumber bigint, is_limit_block boolean )

返回由 TLI 以及起始和结束 LSN 标识的单个 WAL 汇总文件内容的信息。每一行中,如果is_limit_block为 false,则表示其余输出列所标识的块在该文件所汇总的 WAL 记录范围内被至少一条 WAL 记录修改过。每一行中,如果is_limit_block 为 true,则表示以下两种情况之一:(a) 该关系分支在相关 WAL 记录范围内被截断到relblocknumber给出的长度;或者 (b) 该关系分支在相关 WAL 记录范围内被创建或删除;在创建或删除的情况下,relblocknumber将为零。

pg_get_wal_summarizer_state () → record ( summarized_tli bigint, summarized_lsn pg_lsn, pending_lsn pg_lsn, summarizer_pid int )

返回有关 WAL 汇总器进度的信息。如果自实例启动以来 WAL 汇总器从未运行过,则 summarized_tli和summarized_lsn 将分别为0和0/0;否则,它们将是最近写入磁盘的 WAL 汇总文件的 TLI 和结束 LSN。如果 WAL 汇总器当前正在运行,pending_lsn将是它已消费的最后一条记录的结束 LSN,该值必定始终大于或等于summarized_lsn;如果 WAL 汇总器未在运行,则它将等于summarized_lsn。summarizer_pid是 WAL 汇总器进程的 PID;如果它正在运行则返回该 PID,否则为 NULL。

作为一个特殊例外,如果在 wal_level=minimal下生成的 WAL 上运行,WAL 汇总器将拒绝生成 WAL 汇总文件,因为这种汇总用作增量备份的基础是不安全的。在这种情况下,上述字段仍会像正在生成汇总一样继续推进,但不会有任何内容写入磁盘。一旦汇总器处理到在wal_level被设置为replica或更高时生成的 WAL,它就会恢复将汇总写入磁盘。


系统目录属性

此构建的源码初始化值。字段含义参见 pg_type 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。

oid
2970
descr
transaction snapshot
typacl
_null_
typlen
-1
typelem
0
typname
txid_snapshot
typsend
txid_snapshot_send
typtype
b
typalign
d
typarray
0
typbyval
f
typdelim
','
typinput
txid_snapshot_in
typmodin
-
typndims
0
typowner
POSTGRES
typrelid
0
typmodout
-
typoutput
txid_snapshot_out
typtypmod
-1
typanalyze
-
typdefault
_null_
typnotnull
f
typreceive
txid_snapshot_recv
typstorage
x
typbasetype
0
typcategory
U
typcollation
0
typisdefined
t
typnamespace
pg_catalog
typsubscript
-
typdefaultbin
_null_
array_type_oid
2949
typispreferred
f
array_type_name
_txid_snapshot

版本比较

PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。

这两个样本的系统目录和结构化属性没有变化。

这些构建的文档也有差异,请查看对应版本的手册定义。

文档与源码

构建
18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

相关条目

全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。