Lorsque vous essayez de créer une fonction avec Goose à l'aide d'une base de données PostgreSQL, vous pouvez rencontrer le problème 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; ")
Cette erreur est due à la présence de points-virgules dans l'instruction SQL. Goose s'attend à ce que les déclarations complexes, y compris celles comportant des points-virgules, soient annotées avec des commentaires spécifiques.
Pour résoudre le problème, annotez la déclaration comme suit :
<code class="sql"> 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;</code>
La -- goose StatementBegin et - - Les commentaires de Goose StatementEnd demandent à Goose de gérer la déclaration correctement, évitant ainsi le problème avec les chaînes non terminées entre guillemets en dollars.
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!