終了していないドル引用符付き文字列エラーは -- 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 サイトの他の関連記事を参照してください。