在Postgresql中跟踪SQL语句

文章说明

本文主要说明如何在Postgresql中跟踪实际执行的SQL语句。

本文内容有如下应用场景:

  • 在系统中执行了一系列的操作,需要将这些操作转化成SQL在正式环境上一次性执行,省下重新执行一遍的操作时间。
  • 最近系统数据被人或被程序修改导致出错,领导想要查出是谁或者具体程序执行的时间。

解决方案

通过Postgresql自带的SQL日志记录功能

说明:Postgresql自带SQL日志记录功能,开启之后,可以在日志文件查看实际执行的SQL语句

操作步骤

  1. 修改Postgresql数据库配置文件:postgresql.conf

    1. 这个文件一般位于Postgresql安装目录下的data目录中,例如:/home/PLM/postgresql2/data
    2. 如果您是通过docker安装的Postgresql,这个目录一般也会映射到宿主机上
  2. 在配置文件中找到下面的配置项,开启日志记录功能。

  3. # 日志记录总开关
    logging_collector = on# 日志文件夹。注意:如果不指定全路径则是相对于data目录的地址。
    log_directory = 'pg_log'# 日志文件格式,一搬保持默认即可
    log_filename = 'postgres-%Y-%m-%d_%H%M%S.log'# 日志要记录的sql语句类型,一般选 mod。可选值:none, ddl, mod, all
    # ddl: 仅记录数据定义语言(DDL)命令,比如创建、修改或删除表。
    # mod: 记录所有 DDL 以及数据修改语言(DML)命令,比如插入、更新和删除。
    log_statement = 'mod'#  启用或禁用记录 SQL 参数
    log_parameters = on# 上面的参数如果没找到就该这个,参数的最大大小,-1代表无限制
    log_parameter_max_length = 1024# 控制日志文件的自动轮换时间。1d表示1天。如果为0,则禁用轮换。
    log_rotation_age = 1d# 设置日志文件的大小阈值。达到此大小时,日志文件将被自动轮换
    log_rotation_size = 20MB# 是否记录每个 SQL 查询执行的持续时间
    log_duration = off# 定义日志行的前缀格式。%d: 数据库名称,%m: 当前时间戳。 %h: 客户端主机名
    log_line_prefix = '%m %d [%h] '
    # 是否在日志中记录客户端的主机名
    log_hostname = off
    
  4. 注意:如果你连的Postgresql是有多个环境连接不同的数据库的,那可以通过log_line_prefix来打印并区分出数据库名称。

  5. 修改好之后重启Postgresql。

    1. 如果您的Postgresql装在Linux上:sudo systemctl restart postgresql
    2. 如果您的Postgresql装在docker中:重启对应的docker服务即可
  6. 重启之后,只要系统有操作,pg_log应该就能看到对应的日志文件了。

    1. 例如:postgresql-2025-06-16_103025.log
  7. 建议跟踪SQL之前可以清空日志文件排除干扰。

  8. SQL语句格式如下:一般是先打印sql,再打印参数。需要人工将参数填到SQL中。(笔者亲测,也可以让AI帮你完成这个工作)

  9. 2025-06-16 13:02:44.782 UTC [129] LOG:  execute S_3: INSERT INTO sys_log  ( id,description,log_type,method,params,request_ip,time,username,address,browser,req_uri,create_by,create_time,update_by,update_time,del_flag,depart_code )  VALUES  ( $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17 )
    2025-06-16 13:02:44.782 UTC [129] DETAIL:  parameters: $1 = '0899afa2e34f206730bc5b16be3f2988', $2 = '根据对象主键更新创建是否可见', $3 = 'INFO', $4 = 'com.purvar.plm.doc.controller.BaseObjectsAttributeController.updateCreateVisible()', $5 = '{ id: 311bb8fdc75a67dd40571deeed9a7876 visible: 1 }', $6 = '10.244.30.145', $7 = '1750078964782', $8 = 'admin', $9 = '内网IP', $10 = 'Edge', $11 = '/plm-doc/plmsys/api/baseObjectsAttribute/updateCreateVisible', $12 = 'admin', $13 = '2025-06-16 21:02:44.784', $14 = 'admin', $15 = '2025-06-16', $16 = '1', $17 = '001001004002'
    2025-06-16 13:02:59.324 UTC [129] LOG:  execute S_237: UPDATE base_objects_attribute  SET object_id=$1,
    

数据库比对

说明:准备好2个数据库,在一个数据库上进行操作,然后进行数据库比对。

操作步骤

  1. 给你即将要操作的数据库,做一个备份。
    1. 例如:你要操作test1数据库,你可以备份出来一个test-bak。
    2. 通过navicat创建数据库的时候,可以将目标数据库做为模版。
    3. 或者通过navicat的备份还原功能。
  2. 尽量选择一个使用人数较少的系统环境上进行操作。
  3. 使用navicat premium的数据同步可以比对出目标表和源表之间的数据差异并生成sql语句。

方案优缺点

优点:可以直接根据比对结果自动生成SQL语句,无须人工加工。

缺点:随着数据库中的表和数据不断增长,这个方案的性能会越来越低。并且仅适用于dml语句。

注意事项

上述无论哪个方案,都需要操作人对系统的表结构有一定的认知,能够人工识别出真正有效的SQL。因为即使只有一个人在操作,也可能会有一些定时任务或者非业务表的干扰的。

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

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

相关文章

【信创-k8s】重磅-鲲鹏arm+麒麟V10离线部署k8s1.30+kubesphere4.1.3

随着信创产业的推进,鲲鹏arm64架构得以快速发展。而由于信创领域的主要客户通常部署在内网环境中,这使得离线部署成为该架构方案实施过程中不可或缺的关键环节。 **环境涉及软件版本信息** 服务器芯片: **鲲鹏920/飞腾2000(arm64)** 操作系统&#xff…

第11章:Neo4j实际应用案例

理论知识和技术细节固然重要,但真正理解Neo4j的价值在于了解它如何解决实际业务问题。本章将探讨Neo4j在各个领域的实际应用案例,包括社交网络分析、推荐系统、知识图谱以及欺诈检测与安全分析。通过这些案例,读者可以了解如何将前面章节学到…

数字图像处理与OpenCV初探

什么是数字图像处理? 当今时代,数字图像无处不在。手机拍照、安防监控、医疗检查、地图导航、工业质检……我们每天都在接收、分析和处理大量图像信息。对于计算机而言,图像并不是一张“看得懂”的照片,而是由数值组成的矩阵。如何…

ubuntu网络连接失败 + mobaxterm拖拽文件出错等问题解决方法

网络连接问题&#xff0c;表现在不能通过源下载以及更新 终端问题显示【通过 ip a 命令获得】 kejiubuntu:~/Desktop$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00…

C# CS_Prj01 串口通信控制台程序

一直以来&#xff0c;玩8088单板机&#xff0c;上位机都是使用的绿色现成的串口软件。 今天&#xff0c;感觉8088单板机的各部分测试都基本完成了。 本着玩的精神&#xff0c;自己写一个上位机的简单串口程序&#xff0c;与自己的8088单板机通讯。 功能&#xff1a;一个完整…

40套精品大气黑金系列行业PPT模版分享

黑金系列PPT模版&#xff0c;优秀员工颁奖典礼PPT模版&#xff0c;消费订货会PPT模版&#xff0c;共赢未来PPT模版&#xff0c;投资类PPT模版&#xff0c;双12年终盛典PPT模版&#xff0c;商业计划书PPT模版&#xff0c;高端通用企业文化PPT模版&#xff0c;公司喜报企业捷报PP…

SAP学习笔记 - 开发31 - 前端Fiori开发 Device Adaptation(设备自适应)

上一章讲了Fiori开发中的 Responsiveness&#xff08;响应式设计&#xff09;。 SAP学习笔记 - 开发30 - 前端Fiori开发 Responsiveness&#xff08;响应式设计&#xff09;-CSDN博客 本章继续学习Fiori 开发中的知识。 目录 1&#xff0c;Device Adaptation&#xff08;设备…

网络的那些事——初级——OSPF(2)

前面说了OSPF的状态机和一起简单的OSPF配合&#xff0c;接下这章继续写OSPFV2 IP frr和OSPFV3. 什么是OSPF IP FRR? OSPF IP FRR&#xff08;Fast Reroute&#xff09;利用全网链路状态数据库&#xff0c;预先计算出备份路径保存在转发表中&#xff0c;以备在故障时提供流量保…

C++(初阶)(二十一)——unordered_set和unordered_map

二十二&#xff0c;unordered_set和unordered_map的使用 1.unordered_set 1.1介绍 c11 template<class Key,class Hash std::hash<Key>,class KeyEqual std::equal_to<Key>,class Allocator std::allocator<Key> > class unordered_set;c17 na…

Java面试题:分布式ID时钟回拨怎么处理?序列号耗尽了怎么办?

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 引言1 分布式ID2 问题2.1 时钟回拨2.1.1 毫秒级时…

影视剧学经典系列-梁祝-陶渊明《感士不遇赋并序》

1、背景 《感士不遇赋并序》是东晋诗人陶渊明创作的一篇抒发怀才不遇之慨的辞赋作品。受董仲舒《士不遇赋》和司马迁《悲士不遇赋》启发&#xff0c;陶渊明借古喻今&#xff0c;批判“真风告逝&#xff0c;大伪斯兴”的乱世。社会批判‌以“密网裁而鱼骇&#xff0c;宏罗制而鸟…

Spring Cloud Gateway 全面学习指南

Spring Cloud Gateway 全面学习指南 学习目录 第一部分&#xff1a;基础概念与核心架构 API网关概述与Spring Cloud Gateway简介Spring Cloud Gateway核心架构与工作原理Spring Cloud Gateway与Zuul的对比分析Spring Cloud Gateway核心组件详解 第二部分&#xff1a;基础配…

蛋白分析工具和数据库

UniProt&#xff08;Universal Protein Resource&#xff09;是一个综合性的蛋白质数据库&#xff0c;提供了全球范围内已知的蛋白质序列和功能信息。其中&#xff0c;UniProtKB&#xff08;UniProt Knowledgebase&#xff09;是最核心的组成部分&#xff0c;包含了经过注释和分…

Docker -- 快速入门

镜像与容器 当我们使用Docker安装应用时&#xff0c;Docker会自动搜索并下载应用镜像&#xff08;image&#xff09;。镜像不仅包含应用本身&#xff0c;还包含应用运行所需要的环境&#xff0c;配置、系统函数库。Docker会在运行镜像时创建一个隔离环境&#xff0c;称为容器&…

输入数量未知如何设置输入

在 C 的算法题中&#xff0c;如果你不知道输入数据有多少组&#xff08;即测试用例的数量未知&#xff09;&#xff0c;通常的处理方式是使用 循环读取输入直到文件结束 &#xff08;EOF&#xff09;。这类题目常见于在线评测系统&#xff08;如 LeetCode、牛客网、POJ 等&…

如何在Windows上使用qemu安装ubuntu24.04服务器?

2025年6月15日&#xff0c;周日晚上 在Windows上使用QEMU安装Ubuntu 24.04需要完成环境配置、镜像准备、虚拟机创建及系统安装等步骤。以下是综合多个搜索结果后的详细指南&#xff1a; 1. 安装QEMU环境 下载QEMU Windows版 从QEMU官网下载64位安装包&#xff08;如qemu-w64-s…

前端开发面试题总结-vue2框架篇(二)

Vue2高频问答 一、为什么 Vue 的 data 属性必须声明为返回一个初始数据的函数? 回答重点&#xff1a; Vue 的 data 属性声明成一个返回初始数据的函数&#xff0c;是为了确保每个组件实例都有独立的状态。通过这种方式&#xff0c;避免了组件使用相同的数据对象导致的状态共…

Web第二次方向考核复盘

一、简答题 1. &#xff08;1&#xff09;为什么要清除浮动&#xff1f; 答&#xff1a;当子元素浮动时会脱离文档流&#xff0c;父元素无法正确计算子元素高度导致高度、边框异常显示。同时会影响后续文档流布局。 <style>.box1 {border: solid 2px #000;}.child1 {fl…

Linux入门(十八)read函数

read 读取控制台输入 基本语法 read 选项 参数 选项 -p 指定读取值时的提示符 -t 指定读取值时等待的时间&#xff08;秒&#xff09;&#xff0c;如果没有在指定的时间内输入&#xff0c;就不再等待了 参数 变量&#xff1a;指定读取值的变量名 实例&#xff1a; 1、读取控制…

Python 文件操作详解

文章目录 Python 文件操作详解一、文件操作的基本流程二、文件打开模式详解1. 基本模式2. 扩展模式3. 模式组合示例 三、文件操作方法大全1. 打开和关闭文件2. 读取文件内容3. 写入文件内容4. 文件指针操作 四、文件编码处理五、二进制文件操作六、常见文件操作场景1. 文件内容…