0

我有以下代码:

DROP TABLE IF EXISTS pltest;
CREATE TABLE pltest (x jsonb);

DO $$
DECLARE startdate text := to_char(current_date - 1, 'YYYYMMDD');
BEGIN 

EXECUTE format(
           'COPY pltest FROM PROGRAM ''curl "https://example.com/events/start_date=%sT000000Z"''',
           startdate
        );
        
END
$$ ;

它基本上使用参数化的 COPY 语句导入 URL,因此它始终导入过去 24 小时的数据,它在 SQL shell 中完美运行,但是当我尝试使用该代码添加 pgagent 作业时,pgagent 返回“DECLARE 附近的语法错误”。

PostgreSQL 版本:13.3

PgAgent 版本:13

4

1 回答 1

0

这段代码看起来是正确的。它失败并出现预期错误。

ERROR:  invalid input syntax for type json
DETAIL:  Token "<" is invalid.
CONTEXT:  JSON data, line 1: <...
COPY pltest, line 1, column x: "<!doctype html>"
SQL statement "COPY pltest FROM PROGRAM 'curl "https://example.com/events /start_date=20210526T000000Z"'"
PL/pgSQL function inline_code_block line 5 at EXECUTE

也许您的客户破坏了源代码,或者您的 Postgres 太旧了。

于 2021-05-27T04:03:45.470 回答