目录
9.1. 在哪里记录日志 ¶
log_destination
属性 | 描述 |
---|---|
类型 | string |
默认值 | stderr |
级别 |
KingbaseES支持多种方法来记录服务器消息,包括stderr、csvlog和syslog。在 Windows 上还支持eventlog。设置这个参数为一个由想要的日志目的地的列表,之间用逗号分隔。默认值是只记录到stderr。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
如果csvlog被包括在 log_destination
中,日志项会以“逗号分隔值” (CSV)格式被输出,这样可以很方便地把日志载入到程序中。详见 错误报告和日志 。要产生 CSV 格式的日志输出,必须启用 logging_collector 。
当包括有stderr或csvlog时,会创建文件 current_logfiles
来记录当前正在被日志收集器使用的日志文件的位置以及相关的日志目的地。这提供了一种查找实例当前使用的日志的便利手段。这里是该文件内容的一个例子:
stderr log/kingbase.log csvlog log/kingbase.csv
当由于轮转效应创建一个新的日志文件时以及 log_destination
被重载时, current_logfiles
文件会被重建。当 log_destination
中不包括stderr和csvlog时以及当日志收集器被禁用时,这个文件会被删除。
注意
在大多数 Unix 系统上,需要修改系统的syslog守护进程的配置来使用 log_destination
的syslog选项。KingbaseES可以在syslog设备 LOCAL0
到 LOCAL7
中记录(见 syslog_facility ),但是大部分平台上的默认syslog配置会丢弃所有这种消息。需要增加这样的内容:
local0.* /var/log/kingbase
到syslog守护进程的配置文件来让它工作。
在 Windows 上,当使用 log_destination
的 eventlog
选项时,应该在操作系统中注册一个事件源和库,这样 Windows 事件查看器能够清楚地显示事件日志消息。
logging_collector
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | on |
级别 |
这个参数启用 日志收集器 ,它是一个捕捉被发送到stderr的日志消息的后台进程,并且它会将这些消息重定向到日志文件中。这种方法比记录到syslog通常更有用,因为某些类型的消息不会在syslog输出中出现(一个常见的例子是动态链接器错误消息;另一个例子是由 archive_command
等脚本产生的错误消息)。这个参数只能在服务器启动时设置。
注意
也可以不使用日志收集器而把日志记录到stderr,日志消息将只会去到服务器的stderr被定向到的位置。不过,那种方法只适合于低日志量,因为它没有提供方法来轮转日志文件。还有,在某些不使用日志收集器的平台上可能会导致丢失或者混淆日志输出,因为多个进程并发写入同一个日志文件时会覆盖彼此的输出。
注意
日志收集器被设计成从来不会丢失消息。这意味着在极高的负载下,如果服务器进程试图在收集器已经落后时发送更多的日志消息,那么它会被阻塞。相反,syslog倾向于在无法写入消息时丢掉消息,这意味着在这样的情况下它可能会无法记录某些消息,但是它不会阻塞系统的其他部分。
log_directory
属性 | 描述 |
---|---|
类型 | string |
默认值 | sys_log |
级别 |
当 logging_collector
被启用时,这个参数决定日志文件将被在哪个目录下创建。它可以被指定为一个绝对路径,也可以被指定为一个相对于集簇数据目录的相对路径。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。 默认是 sys_log
。
log_filename
属性 | 描述 |
---|---|
类型 | string |
默认值 | kingbase-%Y-%m-%d_%H%M%S.log |
级别 |
当 logging_collector
被启用时,这个参数设置被创建的日志文件的文件名。该值被视为一种 strftime
模式,因此 %
转义可以被用来指定根据时间变化的文件名(注意如果有任何时区独立的 %
转义,计算将在由 log_timezone 指定的时区中完成)。被支持的 %
转义和开放组织的 strftime 说明中列举的类似。注意系统的 strftime
不会被直接使用,因此平台相关(非标准)的扩展无法工作。 默认是 kingbase-%Y-%m-%d_%H%M%S.log
。
如果不使用转义来指定一个文件名,则应该计划使用一个日志轮转工具来避免最终填满整个磁盘。在 8.4 发行之前,如果不存在 %
转义,KingbaseES将追加新日志文件创建时间的纪元,但是现在已经不再这样做了。
如果在 log_destination
中启用了 CSV 格式输出, .csv
将会被追加到时间戳日志文件名中来创建 CSV 格式输出(如果 log_filename
以 .log
结尾,该后缀会被替换)。
这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
log_file_mode
属性 | 描述 |
---|---|
类型 | integer |
默认值 | 0600 |
级别 |
在 Unix 系统上,当 logging_collector
被启用时,这个参数设置日志文件的权限(在微软 Windows 上这个参数将被忽略)。这个参数值应当是一个数字形式的模式,它可以被 chmod
和 umask
系统调用接受(要使用通常的十进制格式,该数字必须以一个 0
(零)开始)。
默认的权限是 0600
,表示只有服务器拥有者才能读取或写入日志文件。其他常用的设置是 0640
,它允许拥有者的组成员读取文件。不过需要修改 log_directory 为将文件存储在集簇数据目录之外的某个位置,才能利用这个设置。在任何情况下,让日志文件变成任何人都可读是不明智的,因为日志文件中可能包含敏感数据。
这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
log_rotation_age
属性 | 描述 |
---|---|
类型 | integer |
默认值 | 1d |
级别 |
当 logging_collector
被启用时,这个参数决定一个个体日志文件的最长生命期。当这些分钟过去后,一个新的日志文件将被创建。将这个参数设置为零将禁用基于时间的新日志文件创建。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
log_rotation_size
属性 | 描述 |
---|---|
类型 | integer |
默认值 | 10MB |
级别 |
当 logging_collector
被启用时,这个参数决定一个个体日志文件的最大尺寸。当这么多千字节被发送到一个日志文件后,将创建一个新的日志文件。将这个参数设置为零将禁用基于尺寸的新日志文件创建。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
log_truncate_on_rotation
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
当 logging_collector
被启用时,这个参数将导致KingbaseES截断(覆盖而不是追加)任何已有的同名日志文件。不过,截断只在一个新文件由于基于时间的轮转被打开时发生,在服务器启动或基于尺寸的轮转时不会发生。如果被关闭,在所有情况下以前存在的文件将被追加。例如,使用这个设置和一个类似 kingbase-%H.log
的 log_filename
将导致产生 24 个每小时的日志文件,并且循环地覆盖它们。这个参数只能在 kingbase.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
设置为 60
并且 将 log_rotation_size
设置为 1000000
。 在 log_filename
中包括 %M
允许发生任何尺寸驱动的轮转来选择一个不同于每个小时的初始文件名的新文件名。
syslog_facility
属性 | 描述 |
---|---|
类型 | enum |
默认值 | LOCAL0 |
级别 |
当启用了向syslog记录时,这个参数决定要使用的syslog“设备”。可以在 LOCAL0
、 LOCAL1
、 LOCAL2
、 LOCAL3
、 LOCAL4
、 LOCAL5
、 LOCAL6
、 LOCAL7
中选择,默认值是 LOCAL0
。还请参阅系统的syslog守护进程的文档。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
syslog_ident
属性 | 描述 |
---|---|
类型 | string |
默认值 | kingbase |
级别 |
当启用了向syslog记录时,这个参数决定用来标识syslog中的KingbaseES消息的程序名。默认值是 kingbase
。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
syslog_sequence_numbers
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | on |
级别 |
当日志被记录到syslog并且这个设置为 on(默认)时,每一个消息会被加上一个增长的序号作为前缀(例如 [2]
)。这种行为避开了很多 syslog 实现默认采用的“--- 上一个消息重复 N 次 ---”形式。在现代 syslog 实现中,抑制重复消息是可以配置的(例如rsyslog中的 $RepeatedMsgReduction
),因此这个参数可能不是必需的。此外,如果想抑制重复消息,可以把这个参数设置为 off。
这个参数只能在 kingbase.conf
文件或者服务器命令行上设置。
syslog_split_messages
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | on |
级别 |
当启用把日志记录到syslog时,这个参数决定消息如何送达 syslog。当设置为 on(默认)时,消息会被分成行,并且长的行也会被划分以便能够放到 1024 字节中,这是传统 syslog 实现一种典型的尺寸限制。当设置为 off 时,KingbaseES 服务器日志消息会被原样送达 syslog 服务,而处理可能的大体量消息的任务由 syslog 服务负责。
如果 syslog 最终被记录到一个文本文件中,那么两种设置的效果是一样的,但最好设置为 on,因为大部分 syslog 实现要么不能处理大型消息,要么需要做特殊的配置以处理大型消息。但是如果 syslog 最终写入到某种其他媒介,有必要让消息保持逻辑上的整体性(也更加有用)。
这个参数只能在 kingbase.conf
文件或者服务器命令行上设置。
event_source
属性 | 描述 |
---|---|
类型 | string |
默认值 | Kingbase |
级别 |
当启用了向事件日志记录时,这个参数决定用来标识日志中KingbaseES消息的程序名。默认值是 KingbaseES
。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
9.2. 什么时候记录日志 ¶
log_min_messages
属性 | 描述 |
---|---|
类型 | enum |
默认值 | warning |
级别 |
控制哪些消息级别被写入到服务器日志。有效值是 DEBUG5
、 DEBUG4
、 DEBUG3
、 DEBUG2
、 DEBUG1
、 INFO
、 NOTICE
、 WARNING
、 ERROR
、 LOG
、 FATAL
和 PANIC
。每个级别都包括以后的所有级别。级别越靠后,被发送的消息越少。默认值是 WARNING
。注意 LOG
在这里有与 client_min_messages 中不同的排名。只有超级用户可以改变这个设置。
log_min_error_statement
属性 | 描述 |
---|---|
类型 | enum |
默认值 | error |
级别 |
控制哪些导致一个错误情况的 SQL 语句被记录在服务器日志中。任何指定 严重级别 或更高级别的消息的当前 SQL 语句将被包括在日志项中。有效值是 DEBUG5
、 DEBUG4
、 DEBUG3
、 DEBUG2
、 DEBUG1
、 INFO
、 NOTICE
、 WARNING
、 ERROR
、 LOG
、 FATAL
和 PANIC
。默认值是 ERROR
,它表示导致错误、日志消息、致命错误或恐慌错误的语句将被记录在日志中。要有效地关闭记录失败语句,将这个参数设置为 PANIC
。只有超级用户可以改变这个设置。
log_min_duration_statement
属性 | 描述 |
---|---|
类型 | integer |
默认值 | -1 |
级别 |
如果语句运行至少指定的毫秒数,将导致记录每一个这种完成的语句的持续时间。将这个参数设置为零将打印所有语句的执行时间。设置为 -1 (默认值)将停止记录语句持续时间。例如,如果设置它为 250ms
,那么所有运行 250ms 或更久的 SQL 语句将被记录。启用这个参数可以有助于追踪应用中未优化的查询。只有超级用户可以改变这个设置。
对于使用扩展查询协议的客户端,解析、绑定和执行步骤的持续时间将被独立记录。
注意
当把这个选项和 log_statement 一起使用时,已经被 log_statement
记录的语句文本不会在持续时间日志消息中重复。如果没有使用syslog,推荐使用 log_line_prefix 记录 PID 或会话 ID,这样可以使用进程 ID 或会话 ID 把语句消息链接到后来的持续时间消息。
log_transaction_sample_rate
属性 | 描述 |
---|---|
类型 | real |
默认值 | 0.0 |
级别 |
设置所有语句都被记录的事务的部分,以及由于其他原因而记录的语句。它适用于每个新事务,而不考虑其语句的持续时间。默认是 0
,意思是不记录任何额外事务的语句。将其设置为 1
记录所有事务的所有语句。 log_transaction_sample_rate
有助于跟踪事务的样本。
注意
与所有语句日志记录选项一样,此选项可能会增加大量开销。
表"消息严重级别"解释了KingbaseES所使用的消息严重级别。如果日志输出被发送到syslog或 Windows 的eventlog,严重级别会按照表中所示进行转换。
严重性 | 用法 | syslog | eventlog |
---|---|---|---|
| 为开 发者提供连续的 更详细的信息。 |
|
|
| 提供 用户隐式要求的 信息,例如来自 |
|
|
| 提供可 能对用户有用的 信息,例如长标 识符截断提示。 |
|
|
| 提 供可能出现的问 题的警告,例如 在一个事务块外 |
|
|
| 报告 一个导致当前命 令中断的错误。 |
|
|
| 报 告管理员可能感 兴趣的信息,例 如检查点活动。 |
|
|
| 报告 一个导致当前会 话中断的错误。 |
|
|
| 报告一个导 致所有数据库会 话中断的错误。 |
|
|
9.3. 记录什么到日志 ¶
application_name
属性 | 描述 |
---|---|
类型 | string |
默认值 | ' ' |
级别 |
application_name
可以是任意小于 NAMEDATALEN
个字符(标准编译中是 64 个字符)的字符串。这通常由一个应用通过到服务器的连接设置。该名称将被显示在 sys_stat_activity
视图中并被包括在 CSV 日志项中。它也会被通过 log_line_prefix 包括在普通日志项中。只有可打印 ASCII 字符能被使用在 application_name
之中。其他字符将被替换为问号( ?
)。
debug_print_parse
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
debug_print_rewritten
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
debug_print_plan
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
这个参数启用发出各种调试输出。当设置时,会打印生成的解析树, 查询重写输出,或执行的每个查询的执行计划。这些信息是在LOG 信息级别发出,因此默认的,它们会出现在服务器日志中,但不会发送给客户端。 可以通过 client_min_messages和/或log_min_messages 来设置。这些参数缺省是off。 这些参数将会让多种调试输出被发出。当被设置时,它们为每一个被执行的查询打印结果分析树、查询重写器输出或执行计划。这些消息在 LOG
消息级别上被发出,因此默认情况下它们将出现在服务器日志中但不会被发送到客户端。可以通过调整 client_min_messages 和/或 log_min_messages 来改变这种情况。这些参数默认是关闭的。
debug_pretty_print
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | on |
级别 |
当被设置时, debug_pretty_print
会缩进由 debug_print_parse
、 debug_print_rewritten
或 debug_print_plan
产生的输出。这将导致比关闭参数时使用的“紧凑”模式可读性更强但是更长的输出。它默认是打开的。
log_checkpoints
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
导致检查点和重启点被记录在服务器日志中。一些统计信息也被包括在日志消息中,包括写入缓冲区的数据和写它们所花的时间。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。默认值是关闭。
log_connections
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
导致每一次尝试对服务器的连接被记录,客户端认证的成功完成也会被记录。 只有超级用户能在会话开始时更改这个参数,在会话中它不能被更改。默认 为 off
。
注意
某些客户端程序(例如ksql)在要求密码时会尝试连接两次,因此重复的“收到连接”消息并不一定表示一个错误。
log_disconnections
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
导致会话终止被记录。日志输出提供的信息类似于 log_connections
,不过还外加会话的持续时间。 只有超级用户能在会话开始时更改这个参数,在会话中它不能被更改。默认 为 off
。
log_duration
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
导致每一个完成的语句的持续时间被记录。默认值是 off
。只有超级用户可以改变这个设置。
对于使用扩展查询协议的客户端,解析、绑定和执行步骤的持续时间将被独立记录。
注意
授权 log_duration
和设置 log_min_duration_statement 为零之间的 区别是,超过 log_min_duration_statement
强制查询的文本被记录, 但这个选项不会。因此,如果 log_duration
为 on
并且 log_min_duration_statement
为正值,所有持续时间都将被记录, 但是只有超过阈值的语句才会被记录查询文本。这种行为有助于在高负载安装中收集统计信息。
log_error_verbosity
属性 | 描述 |
---|---|
类型 | enum |
默认值 | default |
级别 |
控制为每一个被记录的消息要写入到服务器日志的细节量。有效值是 TERSE
、 DEFAULT
和 VERBOSE
,每一个都为显示的消息增加更多域。 TERSE
排除记录 DETAIL
、 HINT
、 QUERY
和 CONTEXT
错误信息。 VERBOSE
输出包括 SQLSTATE
错误码(见 KingbaseES错误代码 )以及产生错误的源代码文件名、函数名和行号。只有超级用户能够更改这个设置。
log_hostname
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
默认情况下,连接日志消息只显示连接主机的 IP 地址。打开这个参数将导致也记录主机名。注意根据主机名解析设置,这可能会导致很微小的性能损失。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
log_line_prefix
属性 | 描述 |
---|---|
类型 | string |
默认值 | '%m [%p] ' |
级别 |
这是一个 printf
风格的字符串,它在每个日志行的开头输出。 %
字符开始“转义序列”,它将被按照下文描述的替换成状态信息。未识别的转义被忽略。其他字符被直接复制到日志行。某些转义只被会话进程识别并且被主服务器进程等后台进程当作空。通过指定一个在%之后和该选项之前的数字可以让状态信息左对齐或右对齐。 负值将导致在右边用空格填充状态信息已达到最小宽度,而正值则在左边填充。填充对于日志文 件的人类可读性大有帮助。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。默认值是 '%m [%p] '
,它记录时间戳和进程ID。
转义 | 效果 | 只限会话 |
---|---|---|
| 应用名 | 是 |
| 用户名 | 是 |
| 数据库名 | 是 |
| 远程主机名或 IP 地址,以及远程端口 | 是 |
| 远程主机名或 IP 地址 | 是 |
| 进程 ID | 否 |
| 无毫秒的时间戳 | 否 |
| 带毫秒的时间戳 | 否 |
| 带毫秒的时间戳(作为 Unix 时间戳) | no |
| 命令标签:会话当前命令的类型 | 是 |
| SQLSTATE 错误代码 | 否 |
| 会话 ID:见下文 | 否 |
| 对每个会话或进程的日志行号,从 1 开始 | 否 |
| 进程开始的时间戳 | 否 |
| 虚拟事务 ID (backendID/localXID) | 否 |
| 事务 ID (如果未分配则为 0) | 否 |
| 不产生输出,但是告 诉非会话进程在字符串的这一点停止;会话进程忽略 | 否 |
| 纯文字 | 否 |
%c
转义打印一个准唯一的会话标识符,它由两个 4 字节的十六进制数(不带先导零)组成,以点号分隔。这些数字是进程启动时间和进程 ID,因此 %c
也可以被用作保存打印这些项的方式的空间。例如,要从 sys_stat_activity
生成会话标识符,使用这个查询:
SELECT to_hex(trunc(EXTRACT(EPOCH FROM backend_start))::integer) || '.' || to_hex(pid) FROM sys_stat_activity;
提示
如果为 log_line_prefix
设置了非空值,通常应该让它的最后一个字符为空格,这样用以提供和日志行的剩余部分的视觉区别。也可以使用标点符号。
提示
Syslog产生自己的时间戳和进程 ID 信息,因此,如果记录到syslog,则不会包括一些转义。
提示
在包括仅在会话(后端)上下文中可用的信息(如用户名或者数据库名)时, %q
转义很有用。例如:
log_line_prefix = '%m [%p] %q%u@%d/%a '
log_lock_waits
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
控制当一个会话为获得一个锁等到超过 deadlock_timeout 时,是否要产生一个日志消息。这有助于决定是否所等待造成了性能低下。默认值是 off
。只有超级用户可以更改这个设置。
log_statement
属性 | 描述 |
---|---|
类型 | enum |
默认值 | none |
级别 |
控制哪些 SQL 语句被记录。有效值是 none
(off)、 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_replication_commands
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
导致每一个复制命令都被记录在服务器日志中。默认值是 off
。只有 超级用户可以更改这个设置。
log_temp_files
属性 | 描述 |
---|---|
类型 | integer |
默认值 | -1 |
级别 |
控制记录临时文件名和尺寸。临时文件可以被创建用来排序、哈希和存储临时查询结果。当每一个临时文件被删除时都会制作一个日志项。一个零值记录所有临时文件信息,而正值只记录尺寸大于或等于指定千字节数的文件。默认设置为 -1,它禁用这种记录。只有超级用户可以更改这个设置。
log_timezone
属性 | 描述 |
---|---|
类型 | string |
默认值 | 'Atlantic/Reykjavik' |
级别 |
设置在服务器日志中写入的时间戳的时区。和 TimeZone 不同,这个值是集簇范围的,因此所有会话将报告一致的时间戳。内建默认值是 GMT
,但是通常会被在 kingbase.conf
中覆盖。initdb将安装一个对应于其系统环境的设置。这个参数只能在 kingbase.conf
文件中或在服务器命令行上设置。
9.4. 使用 CSV 格式的日志输出 ¶
在 log_destination
列表中包括 csvlog
提供了一种便捷方式将日志文件导入到一个数据库表。这个选项发出逗号分隔值(CSV)格式的日志行,包括这些列: 带毫秒的时间戳、 用户名、 数据库名、 进程 ID、 客户端主机、端口号、 会话 ID、 每个会话的行号、 命令标签、 会话开始时间、 虚拟事务 ID、 普通事务 ID、 错误严重性、 SQLSTATE 代码、 错误消息、 错误消息详情、 提示、 导致错误的内部查询(如果有)、 错误位置所在的字符计数、 错误上下文、 导致错误的用户查询(如果有且被 log_min_error_statement
启用)、 错误位置所在的字符计数、 在 KingbaseES 源代码中错误的位置(如果 log_error_verbosity
被设置为 verbose
)以及应用名。 下面是一个定义用来存储 CSV 格式日志输出的样表:
CREATE TABLE kingbase_log ( log_time timestamp(3) with time zone, user_name text, database_name text, process_id integer, connection_from text, session_id text, session_line_num bigint, command_tag text, session_start_time timestamp with time zone, virtual_transaction_id text, transaction_id bigint, error_severity text, sql_state_code text, message text, detail text, hint text, internal_query text, internal_query_pos integer, context text, query text, query_pos integer, location text, application_name text, PRIMARY KEY (session_id, session_line_num) );
使用 COPY FROM
命令将一个日志文件导入到这个表中:
COPY kingbase_log FROM '/full/path/to/logfile.csv' WITH csv;
可以做一些事情来简化导入 CSV 日志文件:
设置
log_filename
和log_rotation_age
为日志文件提供一种一致的、可预测的命名空间。将
log_rotation_size
设置为 0 来禁用基于尺寸的日志轮转,因为它使得日志文件名难以预测。将
log_truncate_on_rotation
设置为on
,这样在同一个文件中旧日志数据不会与新数据混杂。上述表定义包括一个主键声明。这有助于避免意外地两次导入相同的信息。
COPY
命令一次提交所有它导入的数据,因此任何错误将导致整个导入失败。如果导入一个部分完成的日志文件并且稍后当它完全完成后再次导入,主键违背将导致导入失败。请等到日志完成且被关闭之后再导入。这个过程也可以避免意外地导入部分完成的行,这种行也将导致COPY
失败。
9.5. 进程标题 ¶
这些设置控制服务器进程的进程标题如何被修改。进程标题通常可以用ps或者 Windows 上的进程浏览器等程序来查看。
cluster_name
属性 | 描述 |
---|---|
类型 | string |
默认值 | ' ' |
级别 |
为各种目的设置标识此数据库集群(实例)的名称。集群名称出现在该集群中所有服务器进程的进程标题中。而且,它是备用连接的默认应用程序名称(参考 synchronous_standby_names )
为这个集簇中所有的服务器进程设置出现在进程标题中的集簇名称。 这个名称可以 是任何长度不超过 NAMEDATALEN
个字符(在标准编译中是 64字符) 的任何字符串。只有可打印的 ASCII 字符能被用在 cluster_name
值中。 其他字符将被替换为问号( ?
)。如果这个参数被设置为空字符串 ''
(也是默认值),将不会显示名称。这个参数只能在服务器启动时 设置。
update_process_title
属性 | 描述 |
---|---|
类型 | boolean |
默认值 | off |
级别 |
启用进程标题更新,每次服务器接收到一个新的 SQL 命令时都更新进程标题。在大部分平台上这个设置默认为 on
,但是由于 Windows 上更新进程标题的开销更大,所以在 Windows 这个设置默认为 off
。只有超级用户能更改这个设置。