使用csv格式的日志数据
在log_destination列表中包括csvlog提供了一种便捷方式将日志文件导入到一个数据库表。这个选项发出逗号分隔值(CSV)格式的日志行,包括这些列:带毫秒的时间戳、 用户名、 数据库名、 进程 ID、 客户端主机:端口号、 会话 ID、 每个会话的行号、 命令标签、会话开始时间、 虚拟事务 ID、 普通事务 ID、 错误严重性、 SQLSTATE 代码、 错误消息、错误消息详情、 提示、 导致错误的内部查询(如果有)、 错误位置所在的字符计数、 错误上下文、 导致错误的用户查询(如果有且被log_min_error_statement启用)、 错误位置所在的字符计数、 在 PostgreSQL 源代码中错误的位置(如果log_error_verbosity被设置为verbose)以及应用名。下面是一个定义用来存储 CSV 格式日志输出的样表:
CREATE TABLE postgres_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 postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
你可以做一些事情来简化导入 CSV 日志文件:
1. 设置log_filename和log_rotation_age为你的日志文件提供一种一致的、可预测的命名空间。这让你预测文件名会是怎样以及知道什么时候一个个体日志文件完成并且因此准备好被导入。
2. 将log_rotation_size设置为 0 来禁用基于尺寸的日志轮转,因为它使得日志文件名难以预测。
3. 将log_truncate_on_rotation设置为on,这样在同一个文件中旧日志数据不会与新数据混杂。
4. 上述表定义包括一个主键声明。这有助于避免意外地两次导入相同的信息。COPY命令一次提交所有它导入的数据,因此任何错误将导致整个导入失败。如果你导入一个部分完成的日志文件并且稍后当它完全完成后再次导入,主键违背将导致导入失败。请等到日志完成且被关闭之后再导入。这个过程也可以避免意外地导入部分完成的行,这种行也将导致COPY失败。
进程标题
这些设置控制服务器进程的进程标题如何被修改。进程标题通常可以用ps或者 Windows 上的进程浏览器等程序来查看。详见第 27.1 节 。
cluster_name (string)
为不同目的设置标识这个数据库集群(实例)的名称。此集群名称出现在该集群中所有服务器进程的进程标题中。此外,它还是备用连接的默认应用名称。(参见
synchronous_standby_names.)
这个名称可以是任何长度不超过NAMEDATALEN个字符(在标准编译中是 64字符)的任何字符串。只有可打印的 ASCII 字符能被用在cluster_name值中。其他字符将被替换为问号(?)。如果这个参数被设置为空字符串''(也是默认值),将不会显示名称。这个参数只能在服务器启动时设置。

update_process_title (boolean)
启用进程标题更新,每次服务器接收到一个新的 SQL 命令时都更新进程标题。在大部分平台上这个设置默认为on,但是由于 Windows 上更新进程标题的开销更大,所以在Windows 这个设置默认为off。只有超级用户能更改这个设置。





