Maison > Article > développement back-end > Comment résoudre l'erreur de chaîne non terminée citée en dollars lors de la création de fonctions PostgreSQL dans Goose ?
Erreur de chaîne non terminée citée en dollars dans Goose : résolution des problèmes de création de fonctions PostgreSQL
Lorsque vous essayez de créer une fonction dans PostgreSQL à l'aide de Goose, vous peut rencontrer une erreur liée à une chaîne non terminée entre guillemets en dollars. Cette erreur est généralement déclenchée lorsque l'instruction SQL de la fonction contient des points-virgules qui divisent la chaîne.
Pour résoudre ce problème, les utilisateurs de Goose doivent annoter ces instructions complexes avec -- goose StatementBegin et -- goose StatementEnd. Ces annotations séparent l'instruction en morceaux plus petits, permettant à Goose de la traiter correctement.
Dans votre cas spécifique, le code contient des points-virgules dans les instructions UPDATE et INSERT. Par conséquent, le code annoté devrait apparaître comme suit :
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; -- +goose StatementEnd IF found THEN RETURN; END IF; -- +goose StatementBegin BEGIN INSERT INTO userslocations(userid,locationid, count) VALUES (user_id, location_id, 1); RETURN; EXCEPTION WHEN unique_violation THEN -- +goose StatementEnd END; END LOOP; END; $BODY$ LANGUAGE plpgsql;
Une fois ces annotations ajoutées, Goose sera en mesure de traiter correctement l'instruction SQL et de créer la fonction sans rencontrer l'erreur de chaîne non terminée. N'oubliez pas que si vos instructions contiennent des points-virgules intégrés, il est crucial d'ajouter ces annotations pour garantir la compatibilité avec Goose et la bibliothèque pq.
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!