问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

PostgreSQL日志文件配置,记录所有操作记录

创作时间:
作者:
@小白创作中心

PostgreSQL日志文件配置,记录所有操作记录

引用
CSDN
1.
https://blog.csdn.net/aaalk1001/article/details/140413990

为了更详细地记录PostgreSQL的运行日志,我们需要修改PostgreSQL的默认配置文件。以下是具体的配置步骤:

修改配置文件

打开PostgreSQL配置文件postgresql.conf,该文件通常位于PostgreSQL安装目录下的data文件夹中。找到并修改以下配置项:

logging_collector = on
log_statement = 'all'
log_duration = on
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 1

配置文件解释

启用日志收集器

logging_collector = on

记录所有SQL语句

log_statement = 'all'

log_statement有以下几个参数:

  1. none:不记录任何SQL语句的日志。这是默认值。
  2. ddl:仅记录数据定义语言(DDL)语句的日志,例如CREATEALTERDROP等语句。
  3. mod:记录数据修改语言(DML)语句的日志,例如INSERTUPDATEDELETE等语句。
  4. all:记录所有SQL语句的日志,包括DDL、DML和查询语句。

记录每个SQL语句的执行时间

log_duration = on

记录日志格式设置

log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '

log_line_prefix可以包含以下参数:

  • %a:当前会话的应用名称。
  • %u:当前会话的用户名。
  • %d:当前数据库的名称。
  • %r:当前会话的远程主机地址。
  • %p:当前会话的进程ID。
  • %t:当前时间戳。
  • %m:当前会话的日志消息类型。
  • %s:当前会话的会话ID。
  • %i:当前会话的事务ID。
  • %e:当前会话的错误代码。
  • %c:当前会话的命令标识符。

记录每个连接的建立和关闭

log_connections = on

记录每个连接的断开

log_disconnections = on

记录等待锁的查询

log_lock_waits = on

记录临时文件的创建和删除

log_temp_files = 1

log_temp_files有以下几个参数:

  1. 0:不记录临时文件的日志。这是默认值。
  2. 1:记录临时文件的创建和删除操作的日志。
  3. -1:将临时文件的日志记录级别设置为与log_statement相同的级别。

在Docker环境下配置

由于本次测试是使用Docker启动的PostgreSQL,所以需要将修改后的配置文件同步到容器内部。

拷贝配置到容器

docker cp /opt/postgresql.conf postgresql:/var/lib/postgresql/data

参数解释:

  • /opt/postgresql.conf:主机系统上的源文件路径。
  • postgresql:容器的名称或ID。
  • /var/lib/postgresql/data:容器内部的目标路径。

重启服务

docker restart postgresql

模拟测试数据

创建表

DROP TABLE IF EXISTS "public"."student";
CREATE TABLE "public"."student" (
  "student_id" int4 NOT NULL,
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "age" int4,
  "gender" varchar(255) COLLATE "pg_catalog"."default",
  "address" varchar(255) COLLATE "pg_catalog"."default",
  "phone" varchar(255) COLLATE "pg_catalog"."default",
  "grade" varchar(255) COLLATE "pg_catalog"."default"
);
COMMENT ON COLUMN "public"."student"."student_id" IS '学生id';
COMMENT ON COLUMN "public"."student"."name" IS '姓名';
COMMENT ON COLUMN "public"."student"."age" IS '年龄';
COMMENT ON COLUMN "public"."student"."gender" IS '性别';
COMMENT ON COLUMN "public"."student"."address" IS '地址';
COMMENT ON COLUMN "public"."student"."phone" IS '电话';
COMMENT ON COLUMN "public"."student"."grade" IS '年级';
ALTER TABLE "public"."student" ADD CONSTRAINT "student_pkey" PRIMARY KEY ("student_id");

写入数据

INSERT INTO "public"."student" VALUES (1, 'John Doe', 21, 'Male', 'Beijing', '1234567890', 'Grade 10');
INSERT INTO "public"."student" VALUES (2, 'Jane Smith', 19, 'Female', 'Shanghai', '0987654321', 'Grade 11');
INSERT INTO "public"."student" VALUES (3, 'Mike Johnson', 18, 'Male', 'Guangzhou', '9876543210', 'Grade 12');

查看日志

使用Docker启动的PostgreSQL数据库,查看日志需要先进入到容器内部,找到对应的日志文件,才能查看。

列出正在运行的Docker容器

docker ps

进入正在运行的PostgreSQL容器的shell

docker exec -it <CONTAINER_ID_OR_NAME> /bin/sh

进入PostgreSQL数据目录

cd /var/lib/postgresql/data

查看日志文件

tail -f pg_log/postgresql-<DATE>_<TIME>.log

例如,要查看名为postgresql-2022-01-01_120000.log的日志文件,可以运行以下命令:

tail -f pg_log/postgresql-2022-01-01_120000.log

这将以实时方式显示日志文件的内容。

如果在Docker启动PostgreSQL容器时未将日志目录映射到主机上的目录,可以使用-v参数将日志目录映射到主机上的目录,以便能够轻松访问日志文件。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号