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

Patricia Arquette
リリース: 2024-11-03 01:30:29
オリジナル
786 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート