系统视图
AntDB 系统视图参见如下表格:
视图名字 | 用途 |
---|---|
pg_available_extensions | 可用的扩展 |
pg_available_extension_versions | 所有版本的扩展 |
adb_config | 编译时配置参数 |
pg_cursors | 打开的游标 |
pg_file_settings | 配置文件内容摘要 |
pg_group | 数据库用户组 |
pg_hba_file_rules | 客户端认证配置文件内容的摘要 |
pg_indexes | 索引 |
pg_locks | 当前保持或者等待的锁 |
pg_matviews | 物化视图 |
pg_policies | 策略 |
pg_prepared_statements | 预备好的语句 |
pg_prepared_xacts | 预备好的事务 |
pg_publication_tables | publication 和它们相关的表 |
pg_replication_origin_status | 有关复制源的信息,包括复制进度 |
pg_replication_slots | 复制槽信息 |
pg_roles | 数据库角色 |
pg_rules | 规则 |
pg_seclabels | 安全标签 |
pg_sequences | 序列 |
pg_settings | 参数设置 |
pg_shadow | 数据库用户 |
pg_shmem_allocations | 共享内存分配 |
pg_stats | 规划器统计信息 |
pg_stats_ext | 扩展的计划器统计信息 |
pg_tables | 表 |
pg_timezone_abbrevs | 时区简写 |
pg_timezone_names | 时区名字 |
pg_user | 数据库用户 |
pg_user_mappings | 用户映射 |
pg_views | 视图 |
pg_available_extensions
pg_available_extensions
视图列出了可用于安装的扩展。
列类型描述 |
---|
name name 扩展名 |
default_version text 默认版本的名字,如果没有指定则为 NULL |
installed_version text 当前已安装的扩展版本,如果没有安装则为 NULL |
comment text 来自于扩展的控制文件的注释字符串 |
pg_available_extensions
视图是只读的。
pg_available_extension_versions
pg_available_extension_versions
视图列出了可用于安装的指定扩展版本。
列类型描述 |
---|
name name 扩展名 |
version text 版本名 |
installed bool 如果此版本的扩展当前已安装则为真 |
superuser bool 如果只有超级用户被允许安装此扩展则为真(更多请参见 trusted ) |
trusted bool 如果扩展可以由具有适当权限的非超级用户安装,则为真 |
relocatable bool 如果扩展能被重定位到另一个模式则为真 |
schema name 此扩展必须被安装到的模式名,如果此扩展是部分或者全部可以重定位的,此列为 NULL |
requires name[] 先决条件扩展的名字,如果没有则为 NULL |
comment text 来自于扩展的控制文件的注释字符串 |
pg_available_extension_versions
视图是只读的。
adb_config
视图 adb_config
描述了当前安装的 AntDB 版本中的编译时配置参数。它存在的本意是用于那些要和 AntDB 交互的软件包,让它们能找到所需要的头文件和库。它提供了和 adb_config AntDB 客户端应用相同的基本信息。
默认情况下,adb_config
视图只能由超级用户读取。
列类型描述 |
---|
name text 参数名 |
setting text 参数值 |
pg_cursors
pg_cursors
视图列出了当前可用的游标。游标可以以几种方式定义:
- 通过 SQL 中的 DECLARE 语句
- 通过前端/后端协议中的绑定消息
- 通过服务器编程接口(SPI)
pg_cursors
视图显示由任何这些方式创建的游标。视图只存在于定义它们的事务期间,除非声明了 WITH HOLD
。因此非保持游标只在它们的创建事务结束前存在于这个视图中。
注意
视图用于在内部实现 AntDB 的某些部件,例如过程语言。因此,pg_cursors
视图可能包括那些不是由用户显式创建的游标。
列类型描述 |
---|
name text 游标名 |
statement text 提交用于定义此游标的查询语句 |
is_holdable bool 如果游标是可保持的(即,它可以在其定义事务提交后被访问)则为 true ,否则为 false |
is_binary bool 如果游标被声明为BINARY 则为true ,否则为false otherwise |
is_scrollable bool 如果游标是可滚动的(即,允许以一种非顺序的方式检索行)则为 true ,否则为 false |
creation_time timestamptz 游标被声明的时间 |
pg_cursors
视图是只读的。
pg_file_settings
视图 pg_file_settings
提供了服务器配置文件 内容的概要。这个视图中的每一行表示配置文件中出现的一个 “name = value”项,还带有注解指示该值是否被成功地应用。在 配置文件有问题时,有可能出现额外的行,它们没有相关的 “name = value”项,一个例子是配置文件中有语法错误。
这个视图有助于检查在配置文件中打算做的修改是否能工作,或者用来诊断 之前的失败。注意这个视图报告的是配置文件的当前内容, 而不是服务器最后应用的值(这些值通常查看 pg_settings
视图就够了)。
默认情况下,pg_file_settings
视图只有超级用户可读。
列类型描述 |
---|
sourcefile text 配置文件的完整路径名 |
sourceline int4 该项在配置文件中出现的行号 |
seqno int4 项被处理的顺序(1..n ) |
name text 配置参数名 |
setting text 被赋予给参数的值 |
applied bool 为真表示值已被成功应用 |
error text 如果非空,表示一个错误消息,它说明为什么这个项不能被应用 |
如果配置文件包含语法错误或者非法参数名,服务器将不会尝试从其中应用 任何设置,并且因此所有的 applied
域都为假。在这种情 况下,将会有一个或者多个行的 error
域为非空, 它们说明了为什么出问题。否则,将尽可能应用每个设置。如果一个设置不能 被应用(例如非法值或者该设置不能在服务器开始后改变),会有一个合适的 消息存储在它的 error
域中。一个项的 applied
域为假的另一种情况是它被后面一个具有相同参数名的项所覆盖,这种情况不 会被认为是一种错误,因此在 error
域中不会有 错误消息。
pg_group
视图 pg_group
为向后兼容而存在:它模拟了存在于 AntDB 8.1 之前版本中的一个目录。它显式所有角色的名称和未被标记rolcanlogin
的成员,它是被用做组的角色集合的近似。
列类型描述 |
---|
groname name (references pg_authid .rolname )组的名称 |
grosysid oid (references pg_authid .oid )组 ID |
grolist oid[] (references pg_authid .oid )包含此组中角色 ID 的一个数组 |
pg_hba_file_rules
视图 pg_hba_file_rules
提供客户端认证配置文件 pg_hba.conf
内容的摘要。该文件中每个非空、非注释行都会在这个视图中出现一行,行中还有标记表示该规则是否被成功地应用。
这个视图可用来检查认证配置文件中按计划的更改是否起作用,或者诊断之前的失败。注意这个视图报告的是该文件的当前内容,而不是服务器最后一次载入的内容。
默认情况下,只有超级用户可以读取 pg_hba_file_rules
视图。
列类型描述 |
---|
line_number int4 这条规则在 pg_hba.conf 中的行号 |
type text 连接类型 |
database text[] 这条规则应用的数据库名列表 |
user_name text[] 这条规则应用的用户及组名列表 |
address text 主机名或IP地址,或者 all 、samehost 、samenet 之一,对于本地连接为空 |
netmask text IP 地址掩码,如果不适用则为空 |
auth_method text 认证方法 |
options text[] 为认证方法指定的选项(如果有) |
error text 如果非空,则是一个错误消息,它表示为什么这一行无法被处理 |
通常,反映一个不正确项的行只有 line_number
和 error
域中有值。
pg_indexes
视图 pg_indexes
提供对于数据库中每一个索引信息的访问。
列类型描述 |
---|
schemaname name (参考 pg_namespace .nspname )包含表和索引的模式名 |
tablename name (参考 pg_class .relname )此索引的基表的名字 |
indexname name (参考 pg_class .relname )索引名 |
tablespace name (参考 pg_tablespace .spcname )包含索引的表空间名(如果是数据库的默认值则为空) |
indexdef text 索引定义(CREATE INDEX 命令的重构) command |
pg_locks
视图 pg_locks
提供了数据库服务器上活动进程中保持的锁的信息。
pg_locks
中对每一个活动可锁对象、请求锁模式和相关进程的组合都有一行。因此,如果多个进程持有或者正在等待一个可锁对象上的锁,同一个可锁对象可能出现很多次。但是,一个当前没有被锁的对象根本不会出现。
有多种不同类型的可锁对象:整个关系(如表)、关系的单个页、关系的单个元组、事务 ID(包括虚拟和永久 ID)和普通数据库对象(由类 OID 和对象 OID 标识,和 pg_description
或 pg_depend
中的相同方式)。 扩展一个关系的权力也被表示为一个独立的可锁对象,就像更新 pg_database
.datfrozenxid
的权力。“advisory”锁可以具有用户定义的意义。
列类型描述 |
---|
locktype text 可锁对象的类型: relation , extend , frozenid , page , tuple , transactionid , virtualxid , spectoken , object , userlock , or advisory . |
database oid (参考 pg_database .oid )锁目标存在的数据库的 OID,如果目标是一个共享对象则为 0,如果目标是一个事务 ID 则为空 |
relation oid (参考 pg_class .oid )作为锁目标的关系的 OID,如果目标不是一个关系或者只是关系的一部分则此列为空 |
page int4 作为锁目标的页在关系中的页号,如果目标不是一个关系页或元组则此列为空 |
tuple int2 作为锁目标的元组在页中的元组号,如果目标不是一个元组则此列为空 |
virtualxid text 作为锁目标的事务虚拟 ID,如果目标不是一个虚拟事务 ID 则此列为空 |
transactionid xid 作为锁目标的事务 ID,如果目标不是一个事务 ID则此列为空 ID |
classid oid (参考 pg_class .oid )包含锁目标的系统目录的 OID,如果目标不是一个普通数据库对象则此列为空 |
objid oid (参考 any OID column)锁目标在它的系统目录中的 OID,如果目标不是一个普通数据库对象则为空 |
objsubid int2 锁的目标列号(classid 和 objid 指表本身),如果目标是某种其他普通数据库对象则此列为 0,如果目标不是一个普通数据库对象则此列为空 |
virtualtransaction text 保持这个锁或者正在等待这个锁的事务的虚拟 ID |
pid int4 保持这个锁或者正在等待这个锁的服务器进程的 PID,如果此锁被一个预备事务所持有则此列为空 |
mode text 此进程已持有或者希望持有的锁模式的名称 |
granted bool 如果锁已授予则为真,如果锁被等待则为假 |
fastpath bool 如果锁通过快速路径获得则为真,通过主锁表获得则为假 |
一个行的 granted
为真表示一个被指定进程持有的锁。为假表示该进程当前正在等待获取这个锁,这意味着至少一个其他进程正持有或等待同一个可锁对象上的一个冲突锁。该等待进程将一直休眠直到其他锁被释放(或者一个死锁状态被检测到)。单个进程在同一时间只能等待最多一个锁。
贯穿一个事务的运行,一个服务器进程在其生存周期内都持有一个在其虚拟事务 ID上的排他锁。如果一个永久 ID被分配给事务(通常发生在事务改变数据库状态时),它也会持有一个在其永久事务 ID上的排他锁直到它结束。当一个事务发现它需要等待另一个事务,它也会尝试获取其他事务 ID 上的共享锁(不管是虚拟还是永久 ID,视情况而定)。这只有当其他进程终止并释放其锁后才会成功。
尽管元组是一种可锁对象,关于行级锁的信息被存储在磁盘而不是内存中,因此行级锁通常不在这个视图中出现。如果一个进程正在等待一个行级锁,它通常在这个视图中出现,并且表示形式为正在等待已持有该行级锁的永久事务 ID 上的锁。
咨询锁可以在由一个单一 bigint
值或两个整形值构成的键上获取。一个 bigint
键被显示为其高位部分在 classid
列中,低位部分在 objid
列中,并且 objsubid
等于 1。原来的 bigint
值可以使用表达式 (classid::bigint << 32) | objid::bigint
重组。整形键被显示为第一个键在 classid
列中,第二个键在 objid
列中,并且 objsubid
等于 2。键的实际意义由用户决定。咨询锁是每一个数据库的本地锁,所以 database
列对于一个咨询锁没有意义。
pg_locks
提供了一个对于整个数据集簇中所有锁的全局视图,而不仅仅是与当前数据库相关的锁。尽管它的 relation
列可以被连接到pg_class
.oid
来标识被锁关系,但这种方法只有在关系属于当前数据库(database
列是当前数据库 OID 或者 0 的锁对应的关系)的情况下才会得到正确的结果。
pid
列可以被连接到 pg_stat_activity
视图的 pid
列来得到持有或等待持有每一个锁的会话的信息。 例如
SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa
ON pl.pid = psa.pid;
另外,如果正在使用预备事务,virtualtransaction
列可以被连接到 pg_prepared_xacts
视图的 transaction
列来得到持有该锁的预备事务的信息(一个预备事务不可能正在等待一个锁,但它在运行中会一直持有已获得的锁)。 例如:
SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
ON pl.virtualtransaction = '-1/' || ppx.transaction;
虽然通过自连接 pg_locks
可以获得哪些进程阻塞了其他哪些进程的信息,但是很难得到其中的细节。这样一个查询隐藏了关于哪些锁模式与其他哪些锁模式冲突的知识。更糟糕的是,pg_locks
视图无法给出所等待队列中进程的等待顺序,也无法显示哪些进程是代表其他客户端会话运行的并行工作者。更好的方法是使用 pg_blocking_pids()
函数来标识一个等待进程是被哪些进程阻塞的。
pg_locks
视图显示来自于普通锁管理器和谓词锁管理器的数据,它们是独立的系统。此外,普通锁管理器把它的锁分为普通锁和快速路径锁。这些数据并不被保证是完全一致的。当视图被查询时,快速路径锁上的数据(fastpath
= true
)会被一次性从每一个后端收集起来,且并不冻结整个锁管理器的状态。因此有可能某些锁在上述信息被收集的过程中被获得或者释放。注意,不管怎样这些锁是已知不会和任何当前正在发生的锁冲突。在所有后端已经查询了快速路径锁后,普通锁管理器的剩余部分被作为一个单元锁住,并且所有剩余锁的一个一致快照被作为一个原子动作收集。在解锁普通锁管理器后,谓词锁管理器也被类似地锁住并且所有谓词锁被作为一个原子动作收集。因此,在快速路径锁这种特殊情况下,每一个锁管理器会传递一个一致的结果组。但由于我们并不会同时锁上两个锁管理器, 在我们询问完普通锁管理器后或者询问谓词锁管理器之前,锁可以被获得或者释放。
如果对此视图频繁地访问,对普通或者谓词锁管理器加锁可能会对数据库性能产生一定影响。虽然这些锁只会在最少的时间内被保持(足以从锁管理器获得数据),但这无法完全消除可能产生的性能影响。
pg_matviews
视图 pg_matviews
提供了关于数据库中每一个物化视图的信息。
列类型描述 |
---|
schemaname name (参考 pg_namespace .nspname )包含物化视图的模式的名字 |
matviewname name (references pg_class .relname )物化视图的名字 |
matviewowner name (references pg_authid .rolname )物化视图拥有者的名字 |
tablespace name (参考 pg_tablespace .spcname )包含物化视图的表空间名(如使用数据库默认表空间则为空) |
hasindexes bool 如果物化视图有(或者最近有过)任何索引,则此列为真 |
ispopulated bool 如果物化视图当前已被填充,则此列为真 |
definition text 物化视图的定义(一个重构的 SELECT 查询) |
pg_policies
视图 pg_policies
提供了有关数据库中行级 安全性策略的信息。
列类型描述 |
---|
schemaname name (参考 pg_namespace .nspname )包含策略所在表的模式的名称 |
tablename name (参考 pg_class .relname )策略所在表的名称 |
policyname name (参考 pg_policy .polname )策略名称 |
permissive text 策略是宽容性的还是限制性的? |
roles name[] 这个策略适用的角色 |
cmd text 这个策略适用的命令类型 |
qual text 作为这个策略适用的查询的安全屏障条件增加的表达式 |
with_check text 作为尝试向该表增加行的查询的 WITH CHECK 条件增加的表达式 |
pg_prepared_statements
pg_prepared_statements
视图显示在当前会话中可用的所有预备语句。
pg_prepared_statements
为每一个预备语句包含一行。当一个新的预备语句被创建时在此视图中会增加一行,反之当一个预备语句被释放时在此视图中会删除一行(例如,通过 DEALLOCATE 命令)。
列类型描述 |
---|
name text 预备语句的标识符 |
statement text 客户端提交用于创建此预备语句的查询语句。对于通过 SQL 创建的预备语句,这里是由客户端提交的 PREPARE 语句。 对于通过前端/后端协议创建的预备语句,这里是预备语句本身的文本。 |
prepare_time timestamptz 预备语句被创建的时间 |
parameter_types regtype[] 预备语句期望的参数类型,以一个 regtype 数组的形式。这个数组中一个元素所对应的 OID 可通过将 regtype 值转换为 oid 获得。 |
from_sql bool 如果预备语句通过 SQL 命令 PREPARE 创建,则为 true ;如果预备语句通过前端/后端协议创建,则为 false |
pg_prepared_statements
视图为只读。
pg_prepared_xacts
视图 pg_prepared_xacts
显示关于两阶段提交的当前准备好事务的信息。
pg_prepared_xacts
为每一个预备事务包含一行。当事务被提交或回滚时,相应的项将被移除。
列类型描述 |
---|
transaction xid 预备事务的数字事务标识符 |
gid text 分配给事务的全局标识符 |
prepared timestamptz 此事务为提交准备好的时间 |
owner name (references pg_authid .rolname )执行此事务的用户名 |
database name (参考 pg_database .datname )执行此事务所在数据库的名字 |
当 pg_prepared_xacts
视图被访问时,内部事务管理器数据结构被暂时地锁住,并为视图的显示产生一个副本。这确保了视图中是一组一致的结果,并且不会阻塞普通操作。不管怎样,当此视图被频繁访问时,会对数据库性能有所影响。
pg_publication_tables
视图 pg_publication_tables
提供 publication 与其所包含的表之间的映射信息。和底层的目录 pg_publication_rel
不同,这个视图展开了定义为 FOR ALL TABLES
的 publication,这样对这类 publication 来说,每一个合格的表都有一行。
列类型描述 |
---|
pubname name (参考 pg_publication .pubname )发行的名称 |
schemaname name (参考 pg_namespace .nspname )包含表的模式名称 |
tablename name (references pg_class .relname )表的名称 |
pg_replication_origin_status
pg_replication_origin_status
视图包含有关一个特定源已经重放了多少的信息。
列类型描述 |
---|
local_id oid (参考 pg_replication_origin .roident )内部的节点标识符 |
external_id text (参考 pg_replication_origin .roname )外部的节点标识符 |
remote_lsn pg_lsn 源节点的 LSN,到这个位置的数据都已经被复制。 |
local_lsn pg_lsn 这个节点的 LSN,remote_lsn 已经被复制到这里。使用异步提交时,在将数据持久化到磁盘前用它来刷入提交记录。 |
pg_replication_slots
pg_replication_slots
视图提供了当前存在于数据库集簇上的所有复制槽的列表,其中也包括复制槽的当前状态。
列类型描述 |
---|
slot_name name 一个唯一的、集簇范围内的复制槽标识符 |
plugin name 包含这个逻辑槽正在使用的输出插件的共享对象基础名称,对于物理槽为空值。 |
slot_type text 槽类型 - physical 或者 logical |
datoid oid (参考 pg_database .oid )与这个槽相关的数据库的 OID,或者为空值。只有逻辑槽具有相关的数据库。 |
database name (参考 pg_database .datname )与这个槽相关的数据库的名称,或者为空值。只有逻辑槽具有相关的数据库。 |
temporary bool 如果这是一个临时复制槽则为真。临时槽不会被保存在磁盘上并且会在出错或会话结束时自动被删除掉。 |
active bool 如果这个槽当前正在被使用则为真 |
active_pid int4 如果槽当前正在被使用,则记录使用这个槽的会话的进程 ID。如果不活动则为 NULL 。 |
xmin xid 这个槽要需要数据库保留的最旧事务。VACUUM 不能移除被其后续事务删除的元组。 |
catalog_xmin xid 这个槽要需要数据库保留的影响系统目录的最旧事务。VACUUM 不能移除被其后续事务删除的目录元组。 |
restart_lsn pg_lsn 可能仍被这个槽的消费者要求的最旧 WAL 地址(LSN ),并且因此不会在检查点期间自动被移除。 如果这个槽的 LSN 从未被保留过,则为 NULL 。 |
confirmed_flush_lsn pg_lsn 代表逻辑槽的消费者已经确认接收数据到什么位置的地址(LSN )。 比这个地址更旧的数据已经不再可用。对于物理槽这里是 NULL 。 |
wal_status text 此插槽声称的 WAL 文件的可用性。可能的值为:reserved 意味着声称的文件包含 max_wal_size 。extended 意味着 max_wal_size 已超出,但文件仍保留,通过复制插槽或 wal_keep_size 。unreserved 意味着该插槽不再保留所需的 WAL 文件,并且将在下一个检查点删除其中一些文件。 此状态可以返回到 reserved 或 extended 。lost 意味着某些需要的 WAL 文件已被删除,并且此插槽不再可用。最后两种状态仅在 max_slot_wal_keep_size 为非负值时才看到。 如果 restart_lsn 为 NULL,则此字段为空。 |
safe_wal_size int8 可写入 WAL 的字节数,以便此插槽不会处于"丢失"状态的危险中。 对丢失插槽它是 NULL,以及如果 max_slot_wal_keep_size 是 -1 。 |
pg_roles
视图 pg_roles
提供了关于数据库角色的信息。这是 pg_authid
的一个公共可读视图,它隐去了口令域。
列类型描述 |
---|
rolname name 角色名 |
rolsuper bool 角色具有超级用户权限 |
rolinherit bool 如果此角色是另一个角色的成员,角色能自动继承另一个角色的权限 |
rolcreaterole bool 角色能创建更多角色 |
rolcreatedb bool 角色能创建数据库 |
rolcanlogin bool 角色能登录。即此角色能否被作为初始会话授权标识符 |
rolreplication bool 角色是一个复制角色。复制角色可以开启复制连接并且创建和删除复制槽。 |
rolconnlimit int4 对于一个可登录的角色,这里设置角色可以发起的最大并发连接数。-1 表示无限制。 |
rolpassword text 不是口令(总是读起来像******** ) |
rolvaliduntil timestamptz 口令失效时间(只用于口令认证),如果永不失效则为空 |
rolbypassrls bool 绕过每一条行级安全性策略的角色。 |
rolconfig text[] 运行时配置变量的角色特定默认值 |
oid oid (references pg_authid .oid )角色的 ID |
pg_rules
视图 pg_rules
提供对查询重写规则的信息访问。
列类型描述 |
---|
schemaname name (references pg_namespace .nspname )包含表的模式名 |
tablename name (references pg_class .relname )规则适用的表名 |
rulename name (references pg_rewrite .rulename )规则名 |
definition text 规则定义(创建命令的重构) |
pg_rules
视图排除了视图和物化视图的 ON SELECT
规则,它们可以在 pg_views
和 pg_matviews
中找到。
pg_seclabels
视图 pg_seclabels
提供对安全标签的信息访问。它是 pg_seclabel
目录的一个便于查询的版本。
列类型描述 |
---|
objoid oid (参考任意 OID 列)安全标签所属对象的 OID |
classoid oid (参考 pg_class .oid )对象出现的系统目录的 OID |
objsubid int4 对于一个表列上的安全标签,这里是列号(objoid 和 classoid 指表本身)。对于所有其他对象类型,此列为 0。 |
objtype text 此标签应用的对象类型,以文本方式。 |
objnamespace oid (references pg_namespace .oid )如果适用,为此对象的名字空间的 OID;否则为空。 |
objname text 此标签应用的对象名,以文本形式。 |
provider text (参考 pg_seclabel .provider )与此标签相关的标签提供者。 |
label text (references pg_seclabel .label )应用于此对象的安全标签。 |
pg_sequences
视图 pg_sequences
提供对数据库中每个序列的信息的访问。
列类型描述 |
---|
schemaname name (参考 pg_namespace .nspname )包含序列的模式名 |
sequencename name (references pg_class .relname )序列的名称 |
sequenceowner name (references pg_authid .rolname )序列的拥有者的名称 |
data_type regtype (references pg_type .oid )序列的数据类型 |
start_value int8 序列的起始值 |
min_value int8 序列的最小值 |
max_value int8 序列的最大值 |
increment_by int8 序列的增量值 |
cycle bool 序列是否循环 |
cache_size int8 序列的缓冲尺寸 |
last_value int8 最后一个被写入到磁盘的序列值。如果使用了缓冲,这个值可能比从序列中取出的最后一个值大。如果还没有从该序列读取过,则为空。 此外,如果当前用户没有该序列上的 USAGE 或 SELECT 权限,则这个值为空。 |
pg_settings
视图 pg_settings
提供了对服务器上运行时参数的访问。它本质上是 SHOW 和 SET 命令的可替换接口。它还提供了 SHOW
不能提供的关于每一个参数的一些现实,例如最大值和最小值。
列类型描述 |
---|
name text 运行时配置参数名 |
setting text 参数的当前值 |
unit text 参数的隐式单元 |
category text 参数的逻辑组 |
short_desc text 参数的简短描述 |
extra_desc text 附加的参数的详细描述 |
context text 要求设置此参数值的上下文(参见下方) |
vartype text 参数类型(bool , enum , integer , real or string ) |
source text 当前参数值的来源 |
min_val text 参数的最小允许值(对非数字值为空) |
max_val text 参数的最大允许值(对非数字值为空) |
enumvals text[] 一个枚举参数的允许值(对非数字值为空) |
boot_val text 如果参数没有被别的其他设置,此列为在服务器启动时设定的参数值 |
reset_val text 在当前会话中,RESET 将会设置的参数值 |
sourcefile text 当前值被设置的配置文件(空值表示从非配置文件的其他来源设置,由不是超级用户也不是 pg_read_all_settings 成员的用户检查时也为空值),在配置文件中使用 include 指令时有用 |
sourceline int4 当前值被设置的配置文件中的行号(空值表示从非配置文件的其他来源设置,由不是超级用户也不是pg_read_all_settings 成员的用户检查时也为空值)。 |
pending_restart bool 如果配置文件中修改了该值但需要重启,则为 true ,否则为 false |
对于 context
有多种可能的取值。为了降低改变设置的难度,它们是:
-
internal
这些设置不能被直接修改,它们反映了内部决定的值。某些可能在使用不同配置选项重建系统时或者改变
initdb
的选项时可以调整。 -
postmaster
这些设置只能在服务器启动时应用,因此任何修改都需要重启服务器。这些设置的值通常都存储在
postgresql.conf
文件中,或者在启动服务器时通过命令行传递。当然,具有更低context
类型的设置也可以在服务器启动时间被设置。 -
sighup
对于这些设置的修改可以在
postgresql.conf
中完成并且不需要重启服务器。发送一个 SIGHUP 信号给 postmaster 会导致它重新读取postgresql.conf
并应用修改。Postmaster 将会把 SIGHUP 信号传递给它的孩子进程,这样它们也会获得新的值。 -
superuser-backend
对于这些设置的更改可以在
postgresql.conf
中进行而无需重启服务器。也可以在连接请求包(例如通过 libpq 的PGOPTIONS
环境变量)中为一个特定的会话设定它们,但是只有在连接用户是超级用户时才能这样做。如果,在会话启动后这些设置就 不会改变。如果你在postgresql.conf
改变了它们, 向 postmaster 发送一个 SIGHUP 信号让 postmaster 重新读取postgresql.conf
。新的值将 只会影响后续启动的会话。 -
backend
对于这些设置的修改可以在
postgresql.conf
中完成并且不需要重启服务器。它们也可以在一个连接请求包(例如,通过 libpq 的PGOPTIONS
环境变量)中为一个特定会话设置 ,任何用户都可以为这个会话做这种修改。然而,这些设置在会话启动后永不变化。如果你在postgresql.conf
中修改它们,可以向 postmaster 发送一个 SIGHUP 信号让它重读postgresql.conf
。新值只会影响后续启动的会话。 -
superuser
这些设置可以从
postgresql.conf
设置,或者在会话中用SET
命令设置。仅当没有通过SET
设置会话本地值时,postgresql.conf
中的改变才会影响现有的会话。 -
user
这些设置可以从
postgresql.conf
设置,或者在会话中用SET
命令设置。任何用户都被允许修改它们的会话本地值。仅当没有通过SET
设置会话本地值时,postgresql.conf
中的改变才会影响现有的会话。
pg_settings
视图不能被插入或者从中删除,但是它可以被更新。在 pg_settings
的一行上的一个 UPDATE
等价于在该参数上执行一个 SET 命令。修改将只会影响当前会话使用的值。如果一个 UPDATE
在一个后来中断的事务中被发出,UPDATE
命令的效果也会随着事务的回滚而消失。一旦所在的事务被提交,效果将一直保持到会话结束,除非有其他 UPDATE
或 SET
重新修改它。
pg_shadow
视图 pg_shadow
的存在是为了向后兼容:它模拟了在 AntDB 版本 8.1 之前的一个系统目录。它显示 pg_authid
中所有被标记为 rolcanlogin
的角色的属性。
由于这个表包含口令,所以不能是公众可读的,这也是采用 pg_shadow
这个名字的原因。 而 pg_user
是 pg_shadow
上的一个公共可读视图,它屏蔽了口令域。
列类型描述 |
---|
usename name (参考 pg_authid .rolname )用户名 |
usesysid oid (references pg_authid .oid )用户的 ID |
usecreatedb bool 用户可创建数据库 |
usesuper bool 用户为一个超级用户 |
userepl bool 用户可开启流复制并将系统设置或者取消备份模式。 |
usebypassrls bool 用户能否绕过所有的行级安全性策略 |
passwd text 口令(可能被加密),如果没有则为空。 |
valuntil timestamptz 口令过期时间(仅用于口令认证) |
useconfig text[] 运行时配置变量的会话默认值 |
pg_shmem_allocations
pg_shmem_allocations
视图显示从服务器的主共享内存段的分配模式。
请注意,此视图不包括使用动态共享内存基础架构分配的内存。
列类型描述 |
---|
name text 共享内存分配的名字。未使用的内存为 NULL ,并且匿名分配的为 <anonymous> 。 |
off int8 分配开始的偏移量。匿名分配和未使用的内存为 NULL。 |
size int8 分配的大小 |
allocated_size int8 包括填充的分配的大小。对于匿名分配,没有有关填充的信息可用,因此 size 和 allocated_size 列将始终相等。 填充对于可用内存没有意义,因此在这种情况下,列也将相等。 |
匿名分配是直接使用 ShmemAlloc()
分配, 而不是通过 ShmemInitStruct()
或 ShmemInitHash()
.
默认的,pg_shmem_allocations` 视图只能被超级用户读取。
pg_stats
视图 pg_stats
提供对存储在 pg_statistic
目录中信息的访问。此视图能访问 pg_statistic
行是有限制的,可访问行所对应的表必须是用户有读权限的。因此让所有用户都可以读此视图是安全的。
pg_stats
也被设计为能以更适合阅读的格式显示底层目录的信息— 但代价是只要为 pg_statistic
定义了新的槽类型,就必须要扩展此视图的模式。
列类型描述 |
---|
schemaname name (references pg_namespace .nspname )包含表的模式名 |
tablename name (参考 pg_class .relname )表的名称 |
attname name (参考 pg_attribute .attname )被此行描述的列名 |
inherited bool 如果为真,表示此行包括继承子列,不仅仅是指定表中的值 |
null_frac float4 列项中为空的比例 |
avg_width int4 列的条目的平均字节宽度 |
n_distinct float4 如果大于零,表示列中可区分值的估计个数。如果小于零,是可区分值个数除以行数的负值(当 ANALYZE 认为可区分值的数量会随着表增长而增加时采用负值的形式,而如果认为列具有固定数量的可选值时采用正值的形式)。 例如,-1 表示一个唯一列,即其中可区分值的个数等于行数。 |
most_common_vals anyarray 列中最常用值的一个列表(如果没有任何一个值看起来比其他值更常用,此列为空) |
most_common_freqs float4[] 最常用值的频率列表,即每一个常用值的出现次数除以总行数(如果 most_common_vals 为空,则此列为空) |
histogram_bounds anyarray 将列值划分成大小接近的组的值列表。如果存在 most_common_vals ,其中的值会被直方图计算所忽略(如果列类型没有一个< 操作符或者 most_common_vals 等于整个值集合,则此列为空) |
correlation float4 物理行顺序和列值逻辑顺序之间的统计关联。其范围从 -1 到 +1。当值接近 -1 或 +1 时,在列上的一个索引扫描被认为比值接近 0 时的代价更低,因为这种情况减少了对磁盘的随机访问(如果列数据类型不具有一个< 操作符,则此列为空) |
most_common_elems anyarray 在列值中,最经常出现的非空元素列表(对标度类型为空) |
most_common_elem_freqs float4[] 最常用元素值的频度列表,即含有至少一个给定值实例的行的分数。 在每个元素的频度之后有二至三个附加值,它们是每个元素频度的最小和最大值,以及可选的空元素的频度(如果 most_common_elems 为空,则此列为空) |
elem_count_histogram float4[] 在列值中可区分非空元素值计数的一个直方图,后面跟随可区分非空元素的平均数(对于标度类型为空) |
在数组域中项的最大数目可以使用 ALTER TABLE SET STATISTICS
命令控制,或者设置 default_statistics_target 运行时参数从全局上进行控制
pg_stats_ext
视图 pg_stats_ext
提供了访问存储在 pg_statistic_ext
和 pg_statistic_ext_data
目录中的信息的手段。该视图仅允许访问 pg_statistic_ext
和 pg_statistic_ext_data
的行,这些行对应于用户有权读取的表,因此允许公众读取该视图是安全的。
pg_stats_ext
也设计成以比底层目录更可读的格式来展示信息— 代价是每当有扩展的统计信息的新类型加到 pg_statistic_ext
中时其模式必须扩展。
列类型描述 |
---|
schemaname name (references pg_namespace .nspname )包含表的模式名 |
tablename name (参考 pg_class .relname )表的名称 |
statistics_schemaname name (references pg_namespace .nspname )包含扩展的统计信息的模式名 |
statistics_name name (参考 pg_statistic_ext .stxname )扩展的统计信息的名称 |
statistics_owner name (参考 pg_authid .rolname )扩展的统计信息对的拥有者 |
attnames name[] (references pg_attribute .attname )扩展的统计信息定义所在的列名称 |
kinds char[] 为此记录启用的扩展统计信息类型 |
n_distinct pg_ndistinct 列值组合的 N- 不同计数。如果大于零,则为组合中不同值的估计数量。如果小于零,则为不同值数量的负数除以行数。 (当 ANALYZE 认为随着表的增长不同值的数量可能会增加时,使用负数形式;当该列似乎具有固定数量的可能值时,则使用正数形式。) 例如,-1 表示列的唯一组合,其中不同组合的数量与行数相同。 |
dependencies pg_dependencies 功能的依赖关系统计信息 |
most_common_vals text[] 列中值的最常见组合的列表(如果没有组合看上去比其它的更常见,则为空。) |
most_common_val_nulls bool[] 值最常见组合的 NULL标志的列表(当 most_common_vals 是空值时,为空。) |
most_common_freqs float8[] 最常见组合的频率的列表,即每个出现的数量除以行的总数(当 most_common_vals 是空值时,为空) |
most_common_base_freqs float8[] 最常见组合的基本频率的列表,即每个值频率的乘积。(当 most_common_vals 是空值时,为空。) |
数组字段条目的最大数量可以基于一列列地使用 ALTER TABLE SET STATISTICS
命令来控制,或者通过设置全局的 default_statistics_target 运行时参数来控制。
pg_tables
视图 pg_tables
提供对数据库中每个表的信息的访问。
列类型描述 |
---|
schemaname name (references pg_namespace .nspname )包含表的模式名 |
tablename name (参考 pg_class .relname )表名 |
tableowner name (references pg_authid .rolname )表拥有者的名字 |
tablespace name (参考 pg_tablespace .spcname )包含表的表空间的名字(如果使用数据库的默认表空间,此列为空) |
hasindexes bool (参考 pg_class .relhasindex )如果表有(或最近有过)任何索引,此列为真 |
hasrules bool (references pg_class .relhasrules )如果表有(或曾经有过)规则,此列为真 |
hastriggers bool (references pg_class .relhastriggers )如果表有(或者曾经有过)触发器,此列为真 |
rowsecurity bool (references pg_class .relrowsecurity )如果表上启用了行安全性则为真 |
pg_timezone_abbrevs
视图 pg_timezone_abbrevs
提供了对当前被时间输入例程识别的时区缩写的列表。当 timezone_abbreviations 运行时参数被修改,此视图的内容会发生变化。
列类型描述 |
---|
abbrev text 时区缩写 |
utc_offset interval 相对于 UTC 的偏移(正值表示格林威治东部) |
is_dst bool 如果这是一个夏令时缩写,则为真 |
虽然大部分时区缩写表示从 UTC 开始的固定偏移,但是有一些在历史上有值的变化。在这种情况下,这个视图表示它们现在的含义。
pg_timezone_names
视图 pg_timezone_names
提供了一个被 SET TIMEZONE
识别的时区名字的列表,以及它们的相关缩写、UTC 偏移和夏令时状态(从技术上来说,AntDB 不使用 UTC 是因为闰秒没有被处理)。和 pg_timezone_abbrevs
中展示的缩写不同,这里很多名字隐含了一组夏令时转换日期规则。因此,相关信息在本地 DST 边界间变化。所显示的信息基于 CURRENT_TIMESTAMP
的当前值计算得来。
列类型描述 |
---|
name text 时区名 |
abbrev text 时区缩写 |
utc_offset interval 相对于 UTC 的偏移(正值表示格林威治东部) |
is_dst bool 如果当前保持为夏令时则为真 |
pg_user
视图 pg_user
提供关于数据库用户的信息。这是 pg_shadow
的一个公共可读的视图,它消除了口令域。
列类型描述 |
---|
usename name 用户名 |
usesysid oid 用户的 ID |
usecreatedb bool 用户能创建数据库 |
usesuper bool 用户为超级用户 |
userepl bool 用户可开启流复制以及将系统转入/转出备份模式。 |
usebypassrls bool 用户能否绕过所有的行级安全性策略 |
passwd text 不是口令(总是显示为******** ) |
valuntil timestamptz 口令过期时间(只用于口令认证) |
useconfig text[] 运行时配置变量的会话默认值 |
pg_user_mappings
视图 pg_user_mappings
提供有关用户映射的信息。这是 pg_user_mapping
的一个公共可读视图,它对无权使用的用户省去了选项域。
列类型描述 |
---|
umid oid (references pg_user_mapping .oid )用户映射的 OID |
srvid oid (参考 pg_foreign_server .oid )包含该映射的外部服务器的 OID |
srvname name (references pg_foreign_server .srvname )外部服务器名 |
umuser oid (references pg_authid .oid )将被映射的本地角色的 OID,如果用户映射是公共的则为 0 |
usename name 将被映射的本地用户名 |
umoptions text[] 用户映射指定选项,以“keyword=value”字符串的形式 |
为了保护存储为用户映射选项的口令信息,umoptions
列将被读作空,除非满足下列情况之一:
- 当前用户就是被映射的用户,并且拥有该服务器或者持有其上的
USAGE
权限 - 当前用户是服务器的拥有者并且映射是用于
PUBLIC
- 当前用户是一个超级用户
pg_views
视图 pg_views
提供了数据库中每个视图的信息。
列类型描述 |
---|
schemaname name (references pg_namespace .nspname )包含视图的模式名 |
viewname name (参考 pg_class .relname )视图名称 |
viewowner name (references pg_authid .rolname )视图拥有者的名字 |
definition text 视图定义(一个重构的 SELECT 查询) |