Maison  >  Article  >  développement back-end  >  Comment corriger l'erreur « Chaîne non terminée » lors de la création de procédures stockées avec Goose et PostgreSQL ?

Comment corriger l'erreur « Chaîne non terminée » lors de la création de procédures stockées avec Goose et PostgreSQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 01:30:29753parcourir

How to Fix the

Postgres Goose génère une erreur de chaîne non terminée

Problème

Lors de la tentative de création d'une procédure stockée avec Goose à l'aide d'une base de données PostgreSQL, le processus rencontre ce qui suit erreur :

(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.

Cause

L'erreur de Goose qui fait écho à la bibliothèque pq indique un SQL mal formaté. Plus précisément, les instructions complexes contenant des points-virgules nécessitent une annotation spéciale dans Goose :

Résolution

Pour rectifier l'erreur, annotez le SQL de la manière suivante :

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;

En déclarant le Au début et à la fin de chaque instruction, Goose est invité à gérer le SQL correctement, résolvant ainsi l'erreur de chaîne non terminée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn