pg 日志支持多种格式,一般的平面文本
还有csv 格式
在postgresql.conf 里把日志格式设为 csvlog 重新加载配置文件就可以了。
把csv 导入到数据库里分析,可以充分利用sql的便利性。[code]
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)
);
[/code]日志导入[code]
postgres=# \encoding utf8
postgres=# copy postgres_log from '/usr/local/pgsql/data/pg_log/postgresql-2012-10-11.csv' with csv ;
COPY 65
postgres=# \q
[/code]接下来就可以按需分析了。
写了个小脚本,免得每次都麻烦:
[code]
#!/bin/bash
function load_logfile() {
psql < \encoding UTF8
\set on_error stop
begin ;
copy postgres_log from '$1' with csv ;
commit ;
EOF
}
function truncate_table() {
psql < \set on_error stop
begin ;
truncate table postgres_log ;
commit;
EOF
}
if [ "$1" = 'TRUNCATE' -o "$1" = 'truncate' ]
then
truncate_table
else
load_logfile $1
fi
还有csv 格式
在postgresql.conf 里把日志格式设为 csvlog 重新加载配置文件就可以了。
把csv 导入到数据库里分析,可以充分利用sql的便利性。[code]
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)
);
[/code]日志导入[code]
postgres=# \encoding utf8
postgres=# copy postgres_log from '/usr/local/pgsql/data/pg_log/postgresql-2012-10-11.csv' with csv ;
COPY 65
postgres=# \q
[/code]接下来就可以按需分析了。
写了个小脚本,免得每次都麻烦:
[code]
#!/bin/bash
function load_logfile() {
psql < \encoding UTF8
\set on_error stop
begin ;
copy postgres_log from '$1' with csv ;
commit ;
EOF
}
function truncate_table() {
psql < \set on_error stop
begin ;
truncate table postgres_log ;
commit;
EOF
}
if [ "$1" = 'TRUNCATE' -o "$1" = 'truncate' ]
then
truncate_table
else
load_logfile $1
fi
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133735/viewspace-746257/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/133735/viewspace-746257/