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. 附录
17.7. 错误报告和日志
17.7.1. 在哪里记录日志
log_destination
(string
)PostgreSQL 支持多种记录服务器日志的方法,包括 stderr 和 syslog 。在 Windows 里,还支持 eventlog 作为日志系统。把这个选项设置为一个逗号分隔的日志目标的列表。缺省是只记录到 stderr 。这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。redirect_stderr
(boolean
)这个选项允许把那些发送到 stderr 的消息捕获下来,然后把它们重定向到日志文件里。这个选项通常比记录到 syslog 更有用,因为有些消息类型不出现在 syslog 输出中(一个常见的例子是动态连接失败的消息)。这个值只能在服务器启动的时候设置。
log_directory
(string
)在打开了
redirect_stderr
的时候,这个选项判断日志文件在哪个目录里创建。它可以声明成绝对路径,或者是与集群的数据目录相对的路径。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。log_filename
(string
)在打开了
redirect_stderr
的时候,这个选项设置所创建的日志文件的文件名。这个数值将被当作 strftime 模式看待。因此可以用%
逃逸声明随时间而变的文件名。如果没有出现%
逃逸,PostgreSQL 将自动附加日志文件打开的时间戳。比如,如果log_filename
设置为server_log
,那么开始于 Sun Aug 29 19:02:33 2004 MST 的日志文件的名称将是server_log.1093827753
。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。log_rotation_age
(integer
)在打开了
redirect_stderr
的时候,这个选项设置一个独立日志文件的最大生存期。在数值指定的分钟过去之后,将创建一个新的日志文件。设置为零可以关闭以时间为基础的新日志文件的创建。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。log_rotation_size
(integer
)在打开了
redirect_stderr
的时候,这个选项设置一个独立的日志文件的最大尺寸。在数值指定的千字节写入日志文件之后,将会创建一个新的日志文件。设置为零可以关闭以尺寸为基础的新日志文件的创建。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。log_truncate_on_rotation
(boolean
)在打开了
redirect_stderr
的时候,这个选项将导致 PostgreSQL 覆盖而不是附加到任何同名的现有日志文件上。不过,覆盖只是发生在基于时间滚动而创建的新文件上,而不是在服务器启动的时候或者以尺寸为基础的滚动上。如果为 off ,将始终向已存在的文件结尾追加。比如,使用这个选项和类似postgresql-%H.log
这样的log_filename
设置将导致生成 24 个按小时生成的日志文件然后在这些文件上循环。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。例子:保留 7 天的日志,每天一个日志文件,叫做
server_log.Mon
,server_log.Tue
等等,并且上周的日志会自动被这周的日志覆盖。把log_filename
设置为server_log.%a
、把log_truncate_on_rotation
设置为on
、把log_rotation_age
设置为1440
。例子:保留 24 小时的日志,每小时一个日志,但是如果日志文件尺寸大于 1GB 也旋转日志。把
log_filename
设置为server_log.%H%M
、把log_truncate_on_rotation
设置为on
、把log_rotation_age
to60
、把log_rotation_size
设置为1000000
。在log_filename
里包含%M
允许任何尺寸驱动的旋转选取一个和开始的文件名同小时数但是名字不同的文件。syslog_facility
(string
)如果向 syslog 进行记录,那么这个选项判断要使用的 syslog "设施"。你可以从
LOCAL0
(默认),LOCAL1
,LOCAL2
,LOCAL3
,LOCAL4
,LOCAL5
,LOCAL6
,LOCAL7
中选择。又见你的系统的 syslog 守护进程文档。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。syslog_ident
(string
)如果向 syslog 进行记录,这个选项决定用于在 syslog 日志中标识 PostgreSQL 的程序名。缺省是
postgres
。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。
17.7.2. 什么时候记录日志
client_min_messages
(string
)这个选项控制哪些信息发送到客户端。有效的数值是
DEBUG5
,DEBUG4
,DEBUG3
,DEBUG2
,DEBUG1
,LOG
,NOTICE
,WARNING
,ERROR
,FATAL
,PANIC
。每个级别包含所有它后面的级别,级别越靠后,发送的信息越少。缺省是NOTICE
。需要注意的是这里的LOG
和log_min_messages
里的级别不同。log_min_messages
(string
)控制写到服务器日志里的信息的详细程度。有效值是
DEBUG5
,DEBUG4
,DEBUG3
,DEBUG2
,DEBUG1
,INFO
,NOTICE
,WARNING
,ERROR
,LOG
,FATAL
,PANIC
。每个级别都包含它后面的级别。越靠后的数值发往服务器日志的信息越少。缺省是NOTICE
。需要注意的是这里的LOG
和client_min_messages
里的级别不同。只有超级用户可以修改这个设置。log_error_verbosity
(string
)控制记录的每条信息写到服务器日志里的详细程度。有效的值是
TERSE
,DEFAULT
,VERBOSE
,逐个向显示的信息里增加更多的字段。只有超级用户可以改变这个设置。log_min_error_statement
(string
)控制是否在服务器日志里输出那些导致错误条件的 SQL 语句。所有导致一个特定级别(或者更高级别)错误的 SQL 语句都要被记录。有效的值有
DEBUG5
,DEBUG4
,DEBUG3
,DEBUG2
,DEBUG1
,INFO
,NOTICE
,WARNING
,ERROR
,FATAL
,PANIC
。缺省是ERROR
,表示所有导致错误、致命错误、恐慌的 SQL 语句都将被记录。设置为PANIC
表示把这个特性关闭。只有超级用户可以改变这个设置。log_min_duration_statement
(integer
)如果某个语句的持续时间大于或者等于这个毫秒数,那么在日志行上记录该语句及其持续时间。设置为零将打印所有查询和他们的持续时间。设置为-1(缺省值)关闭这个功能。比如,如果你把它设置为
250ms
,那么所有运行时间等于或者超过 250ms 的 SQL 语句都会被记录。打开这个选项可以很方便地跟踪需要优化的查询。只有超级用户可以改变这个设置。对于使用扩展查询协议的客户端,语法分析、邦定、执行每一步所花时间都分别记录。
【注意】当此选项与 log_statement 同时使用时,已经被
log_statement
记录的语句文本不会被重复记录。如果没有使用 syslog 的话,推荐使用 log_line_prefix 记录 PID 或会话 ID ,这样就可以使用它们将语句消息连接耗时消息。silent_mode
(boolean
)安静的运行服务器。如果设置了这个选项,服务器将自动在后台运行并且与控制终端脱开。服务器的标准输出和标准错误将重定向到
/dev/null
,因此,发送的任何信息都将丢失。除非打开了 syslog 日志或者redirect_stderr
,否则我们不建议使用这个选项,因为它让我们很难看到错误信息。这个值只能在服务器启动的时候设置。
这里是这个设置里用到各种信息严重程度类型的一个列表:
DEBUG[1-5]
提供开发人员使用的信息。
INFO
提供用户隐含要求的信息,比如在
VACUUM VERBOSE
过程中的信息。NOTICE
提供可能对用户有帮助的信息,比如,长标识符的截断,作为主键一部分创建的索引。
WARNING
提供给用户的警告,比如在事务块范围之外的
COMMIT
。ERROR
报告导致当前命令退出的错误。
LOG
报告一些管理员感兴趣的信息,比如,检查点活跃性。
FATAL
报告导致当前会话终止的原因。
PANIC
报告导致所有会话退出的原因。
17.7.3. 记录什么
debug_print_parse
(boolean
)debug_print_rewritten
(boolean
)debug_print_plan
(boolean
)debug_pretty_print
(boolean
)这些选项打开各种调试输出。对于执行的每个查询,它们打印生成的分析树、查询重写或者执行规划。
debug_pretty_print
把这些输出进行缩进,会生成易读但是长一些的输出格式。client_min_messages
或log_min_messages
必须是DEBUG1
或者更低才把输出实际发往客户端或者服务器日志。这些选项缺省都是关闭的。log_connections
(boolean
)在每次成功连接的时候都向服务器日志里打印一行详细信息。缺省时是关闭的,尽管它可能很有用。有些客户端程序,比如 psql ,在判断是否需要口令的时候试图连接两次,因此,重复的"connection receive"(收到连接请求)并不意味着一定是问题。这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。log_disconnections
(boolean
)这个选项类似
log_connections
,但是在会话结束的时候在服务器日志里输出一行。缺省是关闭的。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。log_duration
(boolean
)记录每个已完成语句的持续时间。默认值是
off
。只有超级用户可以改变这个设置。对于使用扩展查询协议的客户端,语法分析、邦定、执行每一步所花时间都分别记录。
【注意】设置为 0 时该选项与 log_min_duration_statement 的不同之处在于
log_min_duration_statement
强制记录查询文本。因此,如果log_duration
为on
并且log_min_duration_statement
大于零将记录所有持续时间,但是仅记录那些超过阈值的语句。这可以用于在高负载情况下搜集统计信息。log_line_prefix
(string
)这是一个
printf
风格的字符串,在日志的每行开头输出。缺省是空字符串。下面列出每个可识别的逃逸,任何其它看起来像逃逸的都会被忽略。其它字符都直接拷贝到日志行中。有些逃逸只被会话进程识别,不能应用于后端进程,比如主服务器进程。Syslog 生成自己的时间戳和进程 ID 信息,因此,如果你使用了 syslog ,可能没必要使用那些逃逸。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。逃逸 效果 仅用于会话 %u
用户名 是 %d
数据库名 是 %r
远程主机名或者 IP 地址以及远端端口 是 %h
远程主机名或者 IP 地址 是 %p
进程 ID 否 %t
时间戳(没有毫秒,Windows 上没有时区) 否 %m
带毫秒的时间戳 否 %i
命令标签。这是生成日志行的命令。 是 %c
会话 ID 。每个会话的唯一标识符。它是两个 4 字节的十六进制数字(没有前导零),用句点分开。数字是会话开始时间和进程 ID ,因此也可以用做一种打印这些项目的节约空间的方法。 是 %l
每个进程的日志行编号,从 1 开始。 否 %s
会话开始的时间戳 是 %x
事务 ID 是 %q
不生成任何输出,但是告诉非会话进程在字符串的这个位置停止。被会话进程忽略。 否 %%
%
文本否 log_statement
(string
)控制记录哪些 SQL 语句。有效的值是
none
,ddl
,mod
,all
。ddl
记录所有数据定义命令,比如CREATE
,ALTER
,DROP
语句。mod
记录所有ddl
语句,加上数据修改语句INSERT
,UPDATE
,DELETE
,TRUNCATE
,COPY FROM
。如果所包含的命令类型吻合,那么PREPARE
,EXECUTE
,EXPLAIN ANALYZE
语句也同样被记录。对于使用扩展查询协议的客户端,记录发生在接受到扩展信息并包含邦定参数(内置单引号要双写)的时候。缺省是
none
。只有超级用户可以改变这个设置。【注意】即使设置了
log_statement
=all
,包含简单语法错误的语句也不会被记录。因为仅在完成基本的语法分析并确定了语句类型之后才记录日志。在使用扩展查询协议的情况下,在执行阶段之前(语法分析或规划阶段)同样不会记录。将log_min_error_statement
设为ERROR
或更低才能记录这些语句。log_hostname
(boolean
)缺省时,连接日志只记录所连接主机的 IP 地址。打开这个选项导致同时记录主机名。请注意,这样有可能带来一些不可忽略的性能损失(取决于你的名字解析的设置)。这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论