почему в этом блоке DO есть «синтаксическая ошибка рядом с объявлением» в pgagent?

#postgresql #syntax-error #plpgsql #pgagent

Вопрос:

У меня есть следующий код:

 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
$ ;
 

Он в основном импортирует URL-адрес с параметризованным оператором КОПИРОВАНИЯ, поэтому он всегда импортирует данные за последние 24 часа, он отлично работает в оболочке SQL, но когда я попытался добавить задание pgagent с этим кодом, pgagent возвращает «синтаксическую ошибку рядом с ОБЪЯВЛЕНИЕМ».

Версия PostgreSQL: 13.3

Версия pgAgent: 13

Комментарии:

1. Я не знаком с pgagent, но этот клиент может не распознавать котировки доллара или анонимные функции (блокировать). Возможно, вы сможете обойти это, указав язык для анонимного блока. Например, END $$ LANGUAGE PLPGSQL;

2. Пожалуйста, всегда указывайте свою версию Postgres (и pgagent в данном случае) в вопросах.

3. Извините за это, я отредактировал сообщение и добавил их.

Ответ №1:

Этот код выглядит правильно. Он завершается с ожидаемой ошибкой.

 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 слишком стар.

Комментарии:

1. моя версия postgres-13.3, а версия pgAgent-13.

2. @LautaroAguilera — этот код не сообщает о каких — либо синтаксических ошибках в psql-так что это похоже на ошибку pgagent.