#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.