从 postgres 日志中获取可执行查询

Get executable query from postgres log

我在 PostgreSQL 版本 9.2 中激活了 SQL 语句的日志记录。 它开始写这样的日志语句:

LOG: execute : UPDATE qrz_TRIGGERS SET JOB_NAME = , JOB_GROUP = , IS_VOLATILE = , DESCRIPTION = , NEXT_FIRE_TIME = , PREV_FIRE_TIME = , TRIGGER_STATE = , TRIGGER_TYPE = , START_TIME = , END_TIME = , CALENDAR_NAME = , MISFIRE_INSTR = , PRIORITY = WHERE TRIGGER_NAME = AND TRIGGER_GROUP =

DETAIL: parameters: = 'dssSchedulerJob', = 'DEFAULT', = 'f', > = NULL, = '1501855865730', = '1501855855730', = 'BLOCKED', = 'SIMPLE', = '1252939835730', = '0', $ 11 = NULL, = '0', = '5', = 'dssTrigger', = 'DEFAULT'

我想以这个 SQL 和 运行 为例,在 pgAdmin3 中进行分析。

有人知道如何让 Postgres 区分整数和字符串吗?或者更好地区分需要引号和不需要引号的参数。

在SQL中把参数取到合适的地方就很乱了。另外写一个简单的工具来帮助这里是不可能的或非常困难的,因为它不知道是否需要引号。

谢谢。

如您所见,此处除 null 外的所有值都用单引号引起来。您可以将它们传递给准备好的声明,因为它们在此处提供。一个简短的例子:

t=# prepare a(int) as (select /2);
PREPARE
t=# execute a('4');
 ?column?
----------
        2
(1 row)

t=# execute a('32');
 ?column?
----------
       16
(1 row)

因此您可以按原样使用 LOG: execute 部分来准备语句并解析 DETAIL: parameters: 以用作语句的参数