【问题标题】:Get executable query from postgres log从 postgres 日志中获取可执行查询
【发布时间】: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中的正确位置是很麻烦的。此外,在这里编写一个简单的工具来提供帮助是不可能或非常困难的,因为它不知道是否需要引号。

谢谢。

【问题讨论】:

    标签: sql logging postgresql-9.2


    【解决方案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' 将允许。
    猜你喜欢
    • 2016-07-06
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多