I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
9.20. 系统管理函数
表9-45显示了那些可以用于查询以及修改运行时配置参数的函数。
表9-45. 配置设置函数
名字 | 返回类型 | 描述 |
---|---|---|
| text | 当前的设置值 |
| text | 设置参数并返回新值 |
current_setting
用于以查询形式获取 setting_name
设置的当前值。它和 SQL 命令 SHOW
是等效的。比如:
SELECT current_setting('datestyle'); current_setting ----------------- ISO, MDY (1 row)
set_config
将参数 setting_name
设置为 new_value
。如果 is_local
为 true
,那么新值将只应用于当前事务。如果你希望新值应用于当前会话,那么应该使用 false
。它等效于 SQL 命令 SET
。比如:
SELECT set_config('log_statement_stats', 'off', false); set_config ------------ off (1 row)
表9-46里的函数向其它服务器进程发送控制信号。只有超级用户才能使用这些函数。
表9-46. 服务器信号函数
名字 | 返回类型 | 描述 |
---|---|---|
| boolean | 取消一个后端的当前查询 |
| boolean | 导致所有服务器进程重新装载它们的配置文件 |
| boolean | 滚动服务器的日志文件 |
如果成功,这些函数返回 true
,否则返回 false
。
pg_cancel_backend
向由 pid
标识的后端进程发送一个查询取消(SIGINT)信号。一个活动的后端进程的 PID 可以从 pg_stat_activity
视图的 procpid
字段找到,或者在服务器上用 ps 列出 postgres
进程。
pg_reload_conf
给服务器发送一个 SIGHUP 信号,导致所有服务器进程重新装载配置文件。
pg_rotate_logfile
给日志文件管理器发送信号,告诉它立即切换到一个新的输出文件。这个函数只有在 redirect_stderr
用于日志输出的时候才有用,否则根本不存在日志文件管理器子进程。
表9-47里的函数帮助我们进行在线备份。只有超级用户才能使用这些函数。
表9-47. 备份控制函数
名字 | 返回类型 | 描述 |
---|---|---|
| text | 开始执行在线备份 |
| text | 完成执行在线备份 |
| text | 切换到一个新的事务日志文件 |
| text | 获取当前事务日志的写入位置 |
| text | 获取当前事务日志的插入位置 |
| text , integer | 将事务日志的位置字符串转换为文件名并返回在文件中的字节偏移量 |
| text | 将事务日志的位置字符串转换为文件名 |
pg_start_backup
接受一个用户定义的备份标签(通常这是备份转储文件存放地点的名字)。这个函数向数据库集群的数据目录写入一个备份标签文件,然后以文本方式返回备份的事务日志起始位置。用户不需要关心这个返回值,提供它只是为了万一需要的场合。
postgres=# select pg_start_backup('label_goes_here'); pg_start_backup ----------------- 0/D4445B8 (1 row)
pg_stop_backup
删除 pg_start_backup
创建的标签文件,并且在事务日志归档区里创建一个备份历史文件。这个历史文件包含给予 pg_start_backup
的标签、备份的事务日志起始与终止位置、备份的起始和终止时间。返回值是备份的事务日志终止位置(同样也可能没有什么用)。计算出中止位置后,当前事务日志的插入点将自动前进到下一个事务日志文件,这样,结束的事务日志文件可以被立即归档从而完成备份。
pg_switch_xlog
移动到下一个事务日志文件,以允许将当前日志文件归档(假定你使用连续归档)。返回值是刚刚完成的事务日志文件的事务日志结束位置。如果自从最后一次事务日志切换以来没有活动的事务日志,那么 pg_switch_xlog
什么事也不做,直接返回前一个事务日志文件的结束位置。
pg_current_xlog_location
使用与前面那些函数相同的格式显示当前事务日志的写入位置。类似的,pg_current_xlog_insert_location
显示当前事务日志的插入位置。插入点是事务日志在某个瞬间的"逻辑终点",而实际的写入位置则是从服务器内部缓冲区写出时的终点。写入位置是可以从服务器外部检测到的终点,如果想归档部分完成的事务日志文件,那么这个通常就是你想要的结果。插入点主要用于服务器调试目的。上述两个函数既是只读操作也不需要超级用户权限。
可以使用 pg_xlogfile_name_offset
从前述函数的返回结果中抽取相应的事务日志文件名称和字节偏移量。例如:
postgres=# select * from pg_xlogfile_name_offset(pg_stop_backup()); file_name | file_offset --------------------------+------------- 00000001000000000000000D | 4039624 (1 row)
类似的,pg_xlogfile_name
仅仅抽取事务日志文件名称。如果给定的事务日志位置恰好位于事务日志文件的交界上,这两个函数都返回前一个事务日志文件的名字。这对于管理事务日志归档来说通常是期望的行为,因为前一个文件是当前最后一个需要归档的文件。
有关正确使用这些函数的细节,参阅节23.3。
表9-48中显示的函数计算数据库对象使用的实际磁盘空间。
表9-48. 数据库对象尺寸函数
名字 | 返回类型 | 描述 |
---|---|---|
pg_column_size (any ) | int | 存储一个指定的数值需要的字节数(可能压缩过) |
| bigint | 指定 OID 代表的数据库使用的磁盘空间 |
| bigint | 指定名称的数据库使用的磁盘空间 |
| bigint | 指定 OID 代表的表或者索引所使用的磁盘空间 |
| bigint | 指定名称的表或者索引使用的磁盘空间。表名字可以用模式名修饰。 |
| text | 把字节计算的尺寸转换成一个人类易读的尺寸。 |
| bigint | 指定 OID 代表的表空间使用的磁盘空间 |
| bigint | 指定名字的表空间使用的磁盘空间 |
| bigint | 指定 OID 代表的表使用的磁盘空间,包括索引和压缩数据。 |
| bigint | 指定名字的表所使用的全部磁盘空间,包括索引和压缩数据。表名字可以用模式名修饰。 |
pg_column_size
显示用于存储某个独立数据值的空间。
pg_database_size
和 pg_tablespace_size
接受一个数据库的 OID 或者名字,然后返回该对象使用的全部磁盘空间。
pg_relation_size
接受一个表、索引、压缩表的 OID 或者名字,然后返回它们以字节计的尺寸。
pg_size_pretty
用于把其它函数的结果格式化成一种人类易读的格式,可以根据情况使用KB 、MB 、GB 、TB 。
pg_total_relation_size
接受一个表或者一个压缩表的 OID 或者名称,然后返回以字节计的数据和所有相关的索引和压缩表的尺寸。
表9-49里的函数提供了对数据库服务器所在机器上的文件的本地访问接口。只有那些在数据库集群目录和 log_directory
目录里面的文件可以访问。使用相对路径访问集群目录里面的文件,以及匹配 log_directory
配置设置的路径访问日志文件。只有超级用户才能使用这些函数。
表9-49. 通用文件访问函数
名字 | 返回类型 | 描述 |
---|---|---|
| setof text | 列出目录中的文件 |
| text | 返回一个文本文件的内容 |
| record | 返回一个文件的信息 |
pg_ls_dir
返回指定目录里面的除了特殊项 ".
" 和 "..
" 之外所有名字。
pg_read_file
返回一个文本文件的一部分,从 offset
开始,返回最多 length
字节(如果先达到文件结尾,则小于这个数值)。如果 offset
是负数,那么它就是相对于文件结尾回退的长度。
pg_stat_file
返回一条记录,其中包含:文件大小、最后访问时间戳、最后更改时间戳、最后文件状态修改时间戳(只在 Unix 平台上可用)、文件创建时间戳(只在 Windows 平台上可用)、是否为目录的 boolean
值。典型的用法:
SELECT * FROM pg_stat_file('filename'); SELECT (pg_stat_file('filename')).modification;
表9-50中的函数用于管理咨询锁(Advisory Lock)。有关正确使用这些函数的细节,参阅节12.3.4。
表9-50. 咨询锁函数
名字 | 返回类型 | 描述 |
---|---|---|
| void | 获取排它咨询锁 |
| void | 获取排它咨询锁 |
| void | 获取共享咨询锁 |
| void | 获取共享咨询锁 |
| boolean | 尝试获取排它咨询锁 |
| boolean | 尝试获取排它咨询锁 |
| boolean | 尝试获取共享咨询锁 |
| boolean | 尝试获取共享咨询锁 |
| boolean | 释放排它咨询锁 |
| boolean | 释放排它咨询锁 |
| boolean | 释放共享咨询锁 |
| boolean | 释放共享咨询锁 |
| void | 释放当前会话持有的所有咨询锁 |
pg_advisory_lock
锁定一个应用程序定义的资源,该资源可以用一个 64 位或两个不重叠的 32 位键值标识。如果已经有另外的会话锁定了该资源,那么该函数将会阻塞到该资源可用为止。这个锁是排它的。多个锁定请求将会被压入栈中,因此,如果同一个资源被锁定了三次,那么它必须被解锁三次以将资源释放给其它会话使用。
pg_advisory_lock_shared
类似于 pg_advisory_lock
,不同之处仅在于共享锁可以和其它请求共享锁的会话共享,但排它锁除外。
pg_try_advisory_lock
类似于 pg_advisory_lock
,不同之处在于该函数不会阻塞以等待资源的释放。它要么立即获得锁并返回 true
,要么返回 false
表示目前不能锁定。
pg_try_advisory_lock_shared
类似于 pg_try_advisory_lock
,不同之处在于该函数尝试获得共享锁而不是排它锁。
pg_advisory_unlock
释放先前取得的排它咨询锁。如果释放成功则返回 true
。如果指定的锁实际上并未持有,那么它将返回 false
并在服务器中产生一条 SQL 警告信息。
pg_advisory_unlock_shared
类似于 pg_advisory_unlock
不同之处在于该函数释放的是共享咨询锁。
pg_advisory_unlock_all
将会释放当前会话持有的所有咨询锁,该函数在会话结束的时候被隐含调用,即使客户端异常地断开连接也是一样。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论