У меня есть следующее определение функции для базы данных PostgreSQL 9.3.4:PostgreSQL определение функции в Squirrel: незавершенная доллар кавычках
CREATE OR REPLACE FUNCTION update_modified_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Когда я пытаюсь выполнить это в беличьих (3.5.3 или 3.6) , я получаю следующее сообщение об ошибке:
Error: ERROR: unterminated dollar-quoted string at or near "$$
BEGIN
NEW.modified_at = now()"
Position: 77
SQLState: 42601
ErrorCode: 0
до сих пор я узнал эту can be mitigated by using single quotes, чтобы разграничить функции тела, как так:
CREATE OR REPLACE FUNCTION update_modified_timestamp()
RETURNS TRIGGER AS '
BEGIN
NEW.modified_at = now();
RETURN NEW;
END;
' LANGUAGE plpgsql;
Еще я хотел бы знать, если это невозможно решить иначе - я думаю, это должно быть возможно, так как Flyway может выполнить этот скрипт и использует тот же самый JDBC-драйвер, который настроен в SQuirreL.
Update:@a_horse_with_no_name отметил, что эта ошибка не имеет ничего общего с драйвером JDBC, но с тем, как SQuirreL разбирает оператор SQL и разбивает его на куски, прежде чем отправить их в базу данных. Таким образом, оставшийся вопрос: Может ли SQuirreL отправить запрос raw/unparsed? Я искал совсем немного, не мог найти способ сделать это.
SQLFiddle имеет ту же проблему, но там единственное тело функции кавычек даже не решает проблему. – Patrick
Это не имеет никакого отношения к драйверу JDBC. Я думаю, что Squirrel не знает, что текст между $$ на самом деле является строковым литералом и отправляет только определение функции до первого ';'. Может ли Squirrel отправлять запрос _without parsing it_ в базу данных? Он работает в SQFiddle, если вы используете другой разделитель: http://sqlfiddle.com/#!15/ce3fa3/2 –