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