Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membetulkan Ralat \"Unterminated String\" Apabila Mencipta Prosedur Tersimpan dengan Goose dan PostgreSQL?

Bagaimana untuk Membetulkan Ralat \"Unterminated String\" Apabila Mencipta Prosedur Tersimpan dengan Goose dan PostgreSQL?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 01:30:29752semak imbas

How to Fix the

Postgres Goose Menaikkan Ralat Rentetan Tidak Ditamatkan

Isu

Apabila cuba mencipta prosedur tersimpan dengan Goose menggunakan pangkalan data PostgreSQL, proses tersebut menghadapi perkara berikut ralat:

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

Sebab

Ralat Goose yang bergema daripada perpustakaan pq menunjukkan SQL tersalah format. Khususnya, pernyataan kompleks yang mengandungi koma bertitik memerlukan anotasi khas dalam Goose:

Resolusi

Untuk membetulkan ralat, anotasi SQL dengan cara berikut:

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;

Dengan mengisytiharkan permulaan dan akhir setiap pernyataan, Goose diarahkan untuk mengendalikan SQL dengan betul, menyelesaikan ralat rentetan yang tidak ditamatkan.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \"Unterminated String\" Apabila Mencipta Prosedur Tersimpan dengan Goose dan PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn