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; ")
このエラーは、SQL ステートメント内にセミコロンが存在するために発生します。 Goose は、セミコロンを含む複雑なステートメントに特定のコメントの注釈が付けられることを期待します。
問題を解決するには、次のようにステートメントに注釈を付けます。
<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>
-- goose StatementBegin と - - goose StatementEnd コメントは、Goose にステートメントを正しく処理するよう指示し、終了していないドル引用符で囲まれた文字列の問題を防ぎます。
以上がGoose で PostgreSQL 関数を作成するときに発生する「Unterminated Dollar-Quoted String」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。