重定向输出时,PSQL的结果不同

时间:2019-03-12 12:01:09

标签: postgresql plpgsql psql postgresql-9.6

我遇到了最奇怪的问题。 我们有一个通过cron作业运行的plpgsql脚本。它遍历一系列记录并根据它们更新其他记录。之后,它将在记录表中插入一条记录,并通知它影响了多少条记录。 奇怪的是:如果将输出重定向到/ dev / null,脚本将运行,但不会影响任何记录。如果我们不重定向,它将正常工作。

crontab行的读取方式如下:

  

* / 10 * * * * psql -Upostgres -d pje_pi_2g -f /root/atos2g.sql> / dev / null

这是脚本:

DO
$$
DECLARE mudar record ; qt INT = 0 ;
BEGIN
    FOR mudar IN SELECT
        vi.id_,
        pd.id_processo_documento
    FROM
        jbpm_variableinstance vi
    JOIN jbpm_processinstance pi ON pi.id_ = vi.processinstance_
    AND pi.end_ IS NULL
    JOIN core.tb_processo_instance ppi ON ppi.id_proc_inst = pi.id_
    JOIN jbpm_taskinstance ti ON ti.procinst_ = pi.id_
    AND ti.end_ IS NULL
    AND ti.name_ IN (
        'Cumprir determinações [CD]',
        'Cumprir determinações (urgência) [CD]',
        'Ato judicial assinado [PREC]',
        'Processos recebidos sem cálculo [PREC]',
        'Triagem (financeiro) [PREC]',
        'Triagem (secretaria) [PREC]',
        'Triagem (cálculo) [PREC]',
        'Cumprir determinações [CDPREC]',
        'Acórdão assinado [BC2G]',
        'Lançar movimentações do julgamento [DCG2G]'
    )
    JOIN core.tb_processo prc ON prc.id_processo = ppi.id_processo
    JOIN core.tb_processo_documento pd ON pd.id_processo = prc.id_processo
    AND pd.id_processo_documento = (
        SELECT
            pd1.id_processo_documento
        FROM
            core.tb_processo_documento pd1
        JOIN core.tb_processo_documento_bin bin ON  pd1.id_processo_documento_bin = bin.id_processo_documento_bin
        JOIN client.tb_proc_doc_bin_pess_assin ass ON bin.id_processo_documento_bin = ass.id_processo_documento_bin
        JOIN client.tb_pessoa_magistrado pm ON pm. ID = ass.id_pessoa
        WHERE
            pd1.id_processo = prc.id_processo
        ORDER BY
            pd1.dt_juntada DESC
        LIMIT 1
    )
    WHERE
        vi.name_ = 'pje:atoProferido'
    AND vi.longvalue_ <> pd.id_processo_documento loop 
        qt := qt + 1 ; 
        UPDATE jbpm_variableinstance
    SET longvalue_ = mudar.id_processo_documento
    WHERE
        id_ = mudar.id_ ;
    END loop ; 
    INSERT INTO tjpi.tb_scripts_log (ds_script, qt_afetados)
    VALUES
        ('Atos proferidos', qt) ;
    END ;

如果我们这样运行它,则它不会遍历任何行。如果我们删除重定向,它将正确循环。 有人知道我们应该寻找什么吗? 时间上:我尝试手动运行psql命令,它仍然只能在不重定向的情况下运行。 在此先感谢您,并为很长的问题感到抱歉。

0 个答案:

没有答案