>백엔드 개발 >Golang >Goose를 사용하여 PostgreSQL 함수에서 \'종료되지 않은 달러 인용 문자열\' 오류를 해결하는 방법은 무엇입니까?

Goose를 사용하여 PostgreSQL 함수에서 \'종료되지 않은 달러 인용 문자열\' 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 20:45:29318검색

How to Resolve

--goose 주석으로 해결된 종료되지 않은 달러 인용 문자열 오류

Goose를 사용하여 PostgreSQL 함수를 만들려고 하면 "종료되지 않은 달러"가 발생합니다. -따옴표 붙은 문자열' 오류. 함수의 코드에는 반복 구문, 조건 검사 및 명령문 내에 세미콜론을 도입하는 제한된 예외 블록이 포함됩니다.

설명

Goose 문서에서는 복잡한 SQL을 지정합니다. 세미콜론을 포함하는 명령문은 특수 주석인 gooseStatementBegin 및 --gooseStatementEnd로 구분되어야 합니다. 이러한 주석은 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 함수에서 \'종료되지 않은 달러 인용 문자열\' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.