Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebt man den Fehler „Unterminated String' beim Erstellen gespeicherter Prozeduren mit Goose und PostgreSQL?

Wie behebt man den Fehler „Unterminated String' beim Erstellen gespeicherter Prozeduren mit Goose und PostgreSQL?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 01:30:29793Durchsuche

How to Fix the

Postgres Goose löst einen Fehler wegen nicht abgeschlossener Zeichenfolge aus

Problem

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.

Ursache

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:

Auflösung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn