Ich versuche, diese Funktion mit Goose mit einer Postgres (pq lib) -Datenbank zu erstellen.create Funktion nicht abgeschlossene Dollar-zitierte Zeichenfolge
Mein Code ist wie folgt:
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;
Als ich goose up
versuchen bietet es einen Fehler:
(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 im Grunde Echo ist die pq
Bibliothek Fehler, so dass ich glaube nicht, dass es in Goose ist, sondern eher die pq-Bibliothek. Die Abfrage wird erfolgreich auf pgAdmin III ausgeführt.
Wenn Sie die Funktionsdefinition direkt in psql einfügen, funktioniert das? – harmic
Ja, ich habe das Abfragefenster in pgAdmin III verwendet, wo ich den Code eingefügt und ausgeführt habe. Es funktionierte und ich kann es mit meinem go-app/pq lib ('exec (" Wählen Sie add_userlocation (1,1) ")) – puredevotion
Das bedeutet, Gans muss den Text vor dem Übergeben an libpq ändern. Führt es eine Interpretation von Eingabezeichenfolgen durch? – harmic