ホームページ  >  記事  >  バックエンド開発  >  Goose と PostgreSQL でストアド プロシージャを作成するときに発生する「終了していない文字列」エラーを修正する方法

Goose と PostgreSQL でストアド プロシージャを作成するときに発生する「終了していない文字列」エラーを修正する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 01:30:29753ブラウズ

How to Fix the

Postgres Goose が未終了文字列エラーを発生させる

問題

PostgreSQL データベースを使用して Goose でストアド プロシージャを作成しようとすると、プロセスで次のエラーが発生します。 error:

(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

pq ライブラリからエコーされる Goose のエラーは、SQL の形式が間違っていることを示しています。具体的には、セミコロンを含む複雑なステートメントには、Goose で特別な注釈が必要です。

解決策

エラーを修正するには、次の方法で 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;

各ステートメントの最初と最後で、Goose は SQL を適切に処理し、終了していない文字列エラーを解決するように指示されます。

以上がGoose と PostgreSQL でストアド プロシージャを作成するときに発生する「終了していない文字列」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。