Goose を使用して PostgreSQL 関数の「Unterminated Dollar-Quoted String」エラーを解決する方法

Linda Hamilton
リリース: 2024-11-03 20:45:29
オリジナル
224 人が閲覧しました

How to Resolve

終了していないドル引用符付き文字列エラーは -- goose アノテーションで解決されました

Goose を使用して PostgreSQL 関数を作成しようとすると、「終了していないドル」が発生しました-引用符で囲まれた文字列」エラー。この関数のコードには、ループ構造、条件チェック、およびステートメント内にセミコロンを導入する境界付き例外ブロックが含まれています。

説明

Goose のドキュメントでは、複雑な SQL が指定されています。セミコロンを含むステートメントは、特別な注釈 -- goose StatementBegin および -- goose StatementEnd で区切る必要があります。これらのアノテーションにより、Goose が pq データベース ライブラリでエラーを引き起こすような方法で SQL を変更するのを防ぎます。

解決策

エラーを解決するには、次のように関数コードを変更します。注釈は次のとおりです。

CREATE OR REPLACE FUNCTION add_userlocation(user_id INT, location_id INT) RETURNS VOID AS
-- +goose StatementBegin
$BODY$
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;
END;
-- +goose StatementEnd
$BODY$
LANGUAGE plpgsql;
ログイン後にコピー

複雑なステートメントの開始と終了に注釈を付けることで、Goose は SQL 処理を適切に処理し、PQ ライブラリで終了していない文字列エラーが発生するのを防ぎます。

以上がGoose を使用して PostgreSQL 関数の「Unterminated Dollar-Quoted String」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!