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.
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 :
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!