Beim Versuch, eine gespeicherte Prozedur mit Goose unter Verwendung einer PostgreSQL-Datenbank zu erstellen, stößt der Prozess auf Folgendes 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.
Gooses Fehler, der aus der pq-Bibliothek zurückkommt, weist auf falsch formatiertes SQL hin. Insbesondere komplexe Anweisungen, die Semikolons enthalten, erfordern eine spezielle Annotation in Goose:
Um den Fehler zu beheben, kommentieren Sie die SQL wie folgt:
CREATE OR REPLACE FUNCTION add_userlocation(user_id INT, location_id INT) RETURNS VOID AS $BODY$ -- +goose StatementBegin 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; -- +goose StatementEnd END; $BODY$ LANGUAGE plpgsql;
Indem Sie deklarieren Am Anfang und am Ende jeder Anweisung wird Goose angewiesen, die SQL ordnungsgemäß zu verarbeiten und den nicht abgeschlossenen Zeichenfolgenfehler zu beheben.
Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Unterminated String' beim Erstellen gespeicherter Prozeduren mit Goose und PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!