Maison  >  Article  >  développement back-end  >  Comment corriger l'erreur « Chaîne non terminée en dollars cités » lors de la création de fonctions PostgreSQL avec Goose ?

Comment corriger l'erreur « Chaîne non terminée en dollars cités » lors de la création de fonctions PostgreSQL avec Goose ?

DDD
DDDoriginal
2024-11-03 11:08:02312parcourir

How to Fix

Dépannage de l'erreur « Chaîne non terminée en dollars cités » lors de la création d'une fonction PostgreSQL avec Goose

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!

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