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

在这里插入图片描述

为了更详细的记录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_statement 设置为 mod。如果希望记录所有 SQL 语句,包括查询语句,可以将 log_statement 设置为 all

记录每个 SQL 语句的执行时间
log_duration = on
记录日志格式设置
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '

它可以包含以下参数,每个参数都表示不同的含义:

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

您可以根据需要自定义 log_line_prefix 的配置,以满足您对日志行格式的要求。要更改 log_line_prefix 的值,可以编辑 PostgreSQL 配置文件 postgresql.conf,找到 log_line_prefix 配置项并将其设置为所需的值。然后重新启动 PostgreSQL 服务以使更改生效。

记录每个连接的建立和关闭
log_connections = on
记录每个连接的断开
log_disconnections = on
记录等待锁的查询
log_lock_waits = on
记录临时文件的创建和删除
log_temp_files = 1

PostgreSQL log_temp_files 是一个配置项,用于控制是否记录临时文件的创建和删除操作的日志。它有以下几个参数:

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

log_temp_files 参数的进一步解释:

  • log_temp_files 设置为 0 时,不会记录任何临时文件的日志。
  • log_temp_files 设置为 1 时,会记录临时文件的创建和删除操作的日志。
  • log_temp_files 设置为 -1 时,它会继承 log_statement 的值,即根据 log_statement 的设置来决定是否记录临时文件的日志。如果 log_statement 设置为 none,则不会记录临时文件的日志;如果 log_statement 设置为 allddl,则会记录临时文件的日志。

修改配置文件

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

拷贝配置到容器
docker cp /opt/postgresql.conf postgresql:/var/lib/postgresql/data

以下是对 docker cp 命令中各个参数的含义的解释:

  • /opt/postgresql.conf:这是主机系统上的源文件路径,表示要复制的文件的位置和名称。在这个例子中,它是 PostgreSQL 的配置文件路径。
  • postgresql:这是容器的名称或 ID,表示要将文件复制到哪个容器内部。
  • /var/lib/postgresql/data:这是容器内部的目标路径,表示要将文件复制到容器内部的哪个位置。在这个例子中,它是 PostgreSQL 容器内部的数据目录路径。

通过执行 docker cp 命令,可以将主机系统上的 PostgreSQL 配置文件拷贝到运行中的 PostgreSQL 容器内部,以便在容器中使用该配置文件进行配置和设置。

重启使其生效
docker restart postgresql

在这个命令中,postgresql 是容器的名称或 ID。

模拟测试数据

创建表
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 容器的 CONTAINER ID 或名称。

进入正在运行的 PostgreSQL 容器的 shell
docker exec -it <CONTAINER_ID_OR_NAME> /bin/sh

<CONTAINER_ID_OR_NAME> 替换为实际的 CONTAINER ID 或名称。

进入 PostgreSQL 数据目录
cd /var/lib/postgresql/data

这是默认的 PostgreSQL 数据目录。

使用以下命令查看日志文件
tail -f pg_log/postgresql-<DATE>_<TIME>.log

<DATE><TIME> 替换为实际的日志文件日期和时间。

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python循环遍历:深入理解与实战应用

在Python编程中&#xff0c;循环遍历是一种基本且强大的控制流结构&#xff0c;它允许我们重复执行一段代码直到满足某个条件为止。无论是处理数据集合&#xff08;如列表、元组、字典、集合等&#xff09;&#xff0c;还是执行重复的任务&#xff0c;循环遍历都是不可或缺的工…

807.保持城市天际线

解题思路 首先找到四个主要方向&#xff08;东南西北&#xff09;的天际线情况。南北看是一样的&#xff0c;东西看也是一样的。所以统计出每行的最值&#xff0c;每列的最值&#xff0c;用一个n的数组存储。分别存储行和列的最值。最值的位置进行标记&#xff0c;然后对于其余…

【Qt 基础】绘图

画笔 QPen pen; pen.setWidth(3); // 线条宽度 pen.setColor(Qt::red);// 画笔颜色 pen.setStyle(Qt::DashLine);// 线条样式 pen.setCapStyle(Qt::RoundCap);// 线端样式 pen.setJoinStyle(Qt::BevelJoin);// 连接样式 painter.setPen(pen);线条 线端 连接 画刷 QBrush bru…

Spring容器详细介绍

Spring容器 1 Spring核心容器介绍 问题导入 问题&#xff1a;按照Bean名称获取Bean有什么弊端&#xff0c;按照Bean类型获取Bean有什么弊端&#xff1f; 1.1 创建容器 方式一&#xff1a;类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext…

复合类型的字节对齐

引子 #inlcude<stdio.h> struct s{int i;char a: }; struct s sVar {5,A}; int main(void){printf("%d\n",sizeof(sVar)); }问1&#xff1a;上面这个代码的输出结果是多少&#xff1f; 答1&#xff1a; 思考 明明sVar这个结构体就两个元素&#xff0c;5和…

什么是幂等?如何实现幂等?

一 定义 幂等性&#xff08;Idempotence&#xff09;是数学与计算机科学中的一个概念&#xff0c;它指的是一个操作、函数或方法被重复执行多次与仅执行一次的效果相同&#xff0c;或者说&#xff0c;其后续调用的结果不会改变之前调用的结果。 在计算机科学中&#xff0c;这个…

Spring Boot实战:无缝对接OpenAI

Spring Boot实战&#xff1a;无缝对接OpenAI 在当今的技术领域&#xff0c;人工智能&#xff08;AI&#xff09;已经成为一股不可忽视的力量。OpenAI作为其中的佼佼者&#xff0c;提供了强大的API供开发者使用&#xff0c;以实现各种AI功能。本文将详细介绍如何使用Spring Boo…

开闭原则 (Open/Closed Principle, OCP)

开闭原则 (Open/Closed Principle, OCP) 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;是面向对象设计的五大原则之一。它的基本思想是&#xff1a;软件实体&#xff08;类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭。即在不修改现有代码…

uniapp实现水印相机

uniapp实现水印相机-livePusher 水印相机 背景 前两天拿到了一个需求&#xff0c;要求在内部的oaApp中增加一个卫生检查模块&#xff0c;这个模块中的核心诉求就是要求拍照的照片添加水印。对于这个需求&#xff0c;我首先想到的是直接去插件市场&#xff0c;下一个水印相机…

多头注意力机制详解:多维度的深度学习利器

引言 多头注意力机制是对基础注意力机制的一种扩展&#xff0c;通过引入多个注意力头&#xff0c;每个头独立计算注意力&#xff0c;然后将结果拼接在一起进行线性变换。本文将详细介绍多头注意力机制的原理、应用以及具体实现。 原理 多头注意力机制的核心思想是通过多个注…

springAMQP自定义fanout交换机进行消息的广播

rabbitmq一共有三种交换机&#xff1a; fanout--广播direct--定向topic--话题 rabbitmq-web端 首先我们需要建立一个名叫cybg.fanout交换机与两个自定义的队列用于测试广播效果 我这里就起名字叫做fanout_queue1&fanout_queue2 项目中&#xff1a; 首先对我们的Liste…

当代政治制度(练习题)

当代政治制度&#xff08;练习题&#xff09; *** Rz整理 仅供参考 *** 目前地方人大设立的专门委员会不包括&#xff08;B.法律审查委员会F.外交事务专门委员会 &#xff09;答案不确定 等待指点 A.法制委员会 B.法律审查委员会 C.财政经济委员会 D.社会建设委员会 E.农业与…

Go语言基础数据类型、变量及自增语法

本文内容为Go语言的基础数据类型、变量定义和赋值及自增语法介绍。 目录 基础数据类型 变量 先定义后赋值 定义时直接赋值 自动推导定义赋值 平行赋值 自增语法 总结 基础数据类型 int,int8 intl6, int32, int64 uint8... uint64 float32,float64 true/false 变量 …

unity 环形循环切换UI

环形ui管理器 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System.Collections; using Unity.VisualScripting;public class LevelSelector : MonoBehaviour {public GameObject levelButtonPrefab; // 关卡按钮的…

Elasticsearch:介绍 retrievers - 搜索一切事物

作者&#xff1a;来自 Elastic Jeff Vestal, Jack Conradson 在 8.14 中&#xff0c;Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率&#xff0c;以及它们如何增强你的搜索操作。 检索器是 Elasticsearc…

Linux:解决vim打开文件默认为replace模式

现象 Ubuntu打开 vim 默认为 replace 模式 原因 终端的编码设置与目标机器的编码设置不同。 解决方案 修改 vim 配置文件( /etc/vim/vimrc或者~/.vimrc)&#xff0c;添加&#xff1a; set termencodingutf-8 set fileformatsunix set encodingprcP.S. vimrc 中注释使用英…

知识图谱与LLMs:实时图分析(通过其关系的上下文理解数据点)

大型语言模型 (LLM) 极大地改变了普通人获取数据的方式。不到一年前&#xff0c;访问公司数据需要具备技术技能&#xff0c;包括熟练掌握各种仪表板工具&#xff0c;甚至深入研究数据库查询语言的复杂性。然而&#xff0c;随着 ChatGPT 等 LLM 的兴起&#xff0c;随着所谓的检索…

Ubuntu系统安装mysql之后进行远程连接

1.首先要配置数据库允许进行远程连接 1.1 打开MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf1.2 修改 bind-address 行 #按i进入插入模式 bind-address 0.0.0.0 #按 Esc 键退出插入模式。 #输入:wq 然后按 Enter 保存并退…

React学习笔记02-----

一、React简介 想实现页面的局部刷新&#xff0c;而不是整个网页的刷新。AJAXDOM可以实现局部刷新 1.特点 &#xff08;1&#xff09;虚拟DOM 开发者通过React来操作原生DOM&#xff0c;从而构建页面。 React通过虚拟DOM来实现&#xff0c;可以解决DOM的兼容性问题&#x…

Window10下安装WSL-Ubuntu20.04

1.开启并更新WSL 1.1开启WSL 首先先来看一下电脑是否能够开启WSL:待补充... 然后再来看一下如何开启WSL:win->设置->应用->应用和功能->程序和功能&#xff0c;如下所示&#xff1a; 最后选择启用或关闭Windows功能&#xff0c;开启两个选项&#xff1a;1.Hyper-V…