9

postgres ( pq lib ) データベースを使用してGooseでこの関数を作成しようとしています。

私のコードは次のとおりです。

   CREATE OR REPLACE FUNCTION add_userlocation(user_id INT, location_id INT) RETURNS VOID AS
   $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;
   $BODY$
   LANGUAGE plpgsql;

私がしようとするgoose upと、エラーが発生します:

(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.

Goose は基本的にライブラリ エラーをエコーするpqので、Goose ではなく pq-library にあると思います。pgAdmin III でクエリが正常に実行されます。

4

1 に答える 1

24

goose documentationによると、セミコロンを含む複雑なステートメントには と の注釈を付ける必要があります-- +goose StatementBegin-- +goose StatementEnd

ステートメントにはセミコロンが埋め込まれているため、これらの注釈を使用する必要があります。そうしないと、ガチョウが SQL をマングルして、libpq がエラーを出すようになります。

于 2014-01-06T06:44:59.740 に答える