Unterminated Dollar-Quoted String Error Resolved with -- goose Annotations
Ein Versuch, eine PostgreSQL-Funktion mit Goose zu erstellen, stößt auf einen „unterminated Dollar“. „-quoted string“-Fehler. Der Code der Funktion umfasst ein Schleifenkonstrukt, bedingte Prüfungen und einen begrenzten Ausnahmeblock, der Semikolons innerhalb der Anweisung einführt.
Erklärung
Die Goose-Dokumentation spezifiziert dieses komplexe SQL Anweisungen, die Semikolons enthalten, müssen mit den speziellen Anmerkungen --goose StatementBegin und --goose StatementEnd abgegrenzt werden. Diese Anmerkungen verhindern, dass Goose die SQL in einer Weise ändert, die Fehler mit der pq-Datenbankbibliothek auslöst.
Lösung
Um den Fehler zu beheben, ändern Sie den Funktionscode, um ihn einzuschließen die Annotationen wie folgt:
CREATE OR REPLACE FUNCTION add_userlocation(user_id INT, location_id INT) RETURNS VOID AS -- +goose StatementBegin $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; -- +goose StatementEnd $BODY$ LANGUAGE plpgsql;
Durch das Annotieren des Anfangs und des Endes der komplexen Anweisung wird Goose die SQL-Verarbeitung angemessen handhaben und verhindern, dass die pq-Bibliothek auf den nicht abgeschlossenen Zeichenfolgenfehler stößt.
Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Unterminated Dollar-Quoted String' in PostgreSQL-Funktionen mit Goose?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!