从 postgres 日志中获取可执行查询
Posted
技术标签:
【中文标题】从 postgres 日志中获取可执行查询【英文标题】:Get executable query from postgres log 【发布时间】:2017-08-11 07:54:57 【问题描述】:我在 PostgreSQL 版本 9.2 中激活了 SQL 语句的日志记录。 它开始写这样的日志语句:
日志:执行:更新 qrz_TRIGGERS SET JOB_NAME = $1, JOB_GROUP = $2,IS_VOLATILE = $3,DESCRIPTION = $4,NEXT_FIRE_TIME = $5,PREV_FIRE_TIME = $6,TRIGGER_STATE = $7,TRIGGER_TYPE = $8, START_TIME = $9, END_TIME = $10, CALENDAR_NAME = $11, MISFIRE_INSTR = $12, PRIORITY = $13 其中 TRIGGER_NAME = $14 并且 TRIGGER_GROUP = 15 美元
详细信息:参数:$1 = 'dssSchedulerJob', $2 = 'DEFAULT', $3 = 'f', $4 > = NULL, $5 = '1501855865730', $6 = '1501855855730', $7 = '阻塞',$ 8 ='简单',$ 9 ='1252939835730',$ 10 ='0',$ 11 = NULL,$12 = '0',$13 = '5',$14 = 'dssTrigger',$15 = 'DEFAULT'
我想使用这个 SQL 并在 pgAdmin3 中运行分析。
有人知道如何让 Postgres 区分整数和字符串吗?或者在需要引号和不需要引号的参数之间更好。
取参数放到SQL中的正确位置是很麻烦的。此外,在这里编写一个简单的工具来提供帮助是不可能或非常困难的,因为它不知道是否需要引号。
谢谢。
【问题讨论】:
【参考方案1】:你可以看到除了 null 之外的所有值都用单引号括起来。您可以将它们传递给准备好的语句,因为它们在此处提供。一个简短的例子:
t=# prepare a(int) as (select $1/2);
PREPARE
t=# execute a('4');
?column?
----------
2
(1 row)
t=# execute a('32');
?column?
----------
16
(1 row)
因此您可以使用 LOG: execute
部分来准备语句并解析 DETAIL: parameters:
以用作语句的参数
【讨论】:
这意味着我可以使用带引号的值,不管它们是字符串还是 int 值? 整数作为文本到整数的“默认转换”,因此它不允许'99a'
作为整数传递,但 '99'
将允许。以上是关于从 postgres 日志中获取可执行查询的主要内容,如果未能解决你的问题,请参考以下文章
我如何将Postgres DDL转储到可粘贴到Google表格中的CSV中?