постгресс строки в долларовых кавычках без завершения для создания функции

этот вопрос может задать многим здесь, но я попробовал их совет, но он все еще не работает на мне, поэтому я собираюсь спросить об этом, я пытаюсь создать function, где автоматически запускать update_at, когда я обновляю что-то в таблицах, вот мой синтаксис в файле .sql:

CREATE OR REPLACE FUNCTION trigger_set_timestamp()
RETURNS TRIGGER AS $BODY$
BEGIN
  NEW.updated_at = NOW();
  RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql;

я всегда получаю ошибку:

unterminated dollar-quoted string at or near "$BODY$
BEGIN
  NEW.updated_at = NOW()"

Я пытался изменить его на $$, но все равно не работает, я использую Go для этого случая с инструментом миграции под названием sql-миграция

может у кого есть решение для этого? Я пытался со вчерашнего дня, и я действительно застрял сейчас для этого


person srx lnx    schedule 01.06.2020    source источник
comment
Похоже, ваш клиент рассматривает точку с запятой как конец оператора и игнорирует окружающие кавычки. Кажется сломанным.   -  person Erwin Brandstetter    schedule 01.06.2020
comment
вы имели в виду, что клиент сломан? я попробовал psql -c "THAT_SYNTAX" это сработало @ErwinBrandstetter   -  person srx lnx    schedule 01.06.2020
comment
Да, клиент кажется сломанным. Заявление в порядке. Я видел клиентов, которые не могли справиться с долларовыми котировками. Но вы говорите, что это также не работает со стандартными одинарными кавычками.   -  person Erwin Brandstetter    schedule 01.06.2020
comment
хорошо, спасибо за совет :) @ErwinBrandstetter   -  person srx lnx    schedule 01.06.2020


Ответы (1)


Это может исходить от вашего клиента, который не признает котировку доллара.

Типичным обходным решением является использование обычных одинарных кавычек. Это требует двойного цитирования всех встроенных одинарных кавычек, но, к счастью, в вашем коде их нет, поэтому:

CREATE OR REPLACE FUNCTION trigger_set_timestamp()
RETURNS TRIGGER AS '
BEGIN
  NEW.updated_at = NOW();
  RETURN NEW;
END;
' LANGUAGE plpgsql;
person GMB    schedule 01.06.2020
comment
я устал от этого и до того, как задал этот вопрос, я получил такую ​​​​ошибку: unterminated quoted string at or near "' при повторном запуске - person srx lnx; 01.06.2020
comment
on psql -c THAT_SYNTAX`` сработало, но на моем клиенте возникла ошибка - person srx lnx; 01.06.2020