Создать функцию неопределенной строки в кавычках
Я пытаюсь создать эту функцию с помощью Goose, используя базу данных postgres ( pq lib).
Мой код выглядит следующим образом:
CREATE OR REPLACE FUNCTION add_userlocation(user_id INT, location_id INT) RETURNS VOID AS
$BODY$
BEGIN
LOOP
UPDATE userslocations SET count = count+1 WHERE userid = user_id AND locationid = location_id;
IF found THEN
RETURN;
END IF;
BEGIN
INSERT INTO userslocations(userid,locationid, count) VALUES (user_id, location_id, 1);
RETURN;
EXCEPTION WHEN unique_violation THEN
END;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
Когда я пытаюсь goose up
выдает ошибку:
(pq: unterminated dollar-quoted string at or near "$BODY$
BEGIN
LOOP
-- first try to update the key
UPDATE userslocations SET count = count+1 WHERE userid = user_id AND locationid = location_id;
"), quitting migration.
Гусь в основном эхо pq
Ошибка библиотеки, поэтому я не думаю, что это в Goose, а скорее в pq-библиотеке. Запрос успешно выполняется на pgAdmin III.
1 ответ
Решение
В соответствии с документацией Goose, сложные операторы, содержащие точки с запятой, должны быть отмечены с помощью - +goose StatementBegin и - +goose StatementEnd
Ваше утверждение содержит точки с запятой, встроенные в него, поэтому вам нужно использовать эти аннотации. В противном случае гусь искажает SQL, так что libpq выдает ошибки.