尝试使用 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 函数时如何修复'未终止的美元引用字符串”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!