2014-01-05 17 views
5

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.

+0

Wenn Sie die Funktionsdefinition direkt in psql einfügen, funktioniert das? – harmic

+0

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

+0

Das bedeutet, Gans muss den Text vor dem Übergeben an libpq ändern. Führt es eine Interpretation von Eingabezeichenfolgen durch? – harmic

Antwort

11

Nach der Gans Dokumentation, komplexe Anweisungen, die Semikolons enthalten muss mit Anmerkungen versehen werden - + Gans StatementBegin und - + Gans StatementEnd

Ihre Aussage Semikolons eingebettet darin enthält, so dass Sie diese Anmerkungen verwenden müssen. Ansonsten zerfleischt gans das SQL, so dass libpq Fehler gibt.

+0

Keine Ahnung, wie ich diesen Teil der Dokumentation gelesen habe: -S – puredevotion

+0

Du hast mich mit deiner Antwort gerettet :-) – Arkan

+0

du bist mein Held ... –