Я пытаюсь создать эту функцию с помощью 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.
Goose в основном повторяет ошибку библиотеки pq
, поэтому я не думаю, что это в Goose, а скорее в pq-библиотеке. Запрос выполняется успешно на pgAdmin III.
exec("Select add_userlocation(1,1)")
) - person puredevotion   schedule 06.01.2014