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.
Ralat Goose yang bergema daripada perpustakaan pq menunjukkan SQL tersalah format. Khususnya, pernyataan kompleks yang mengandungi koma bertitik memerlukan anotasi khas dalam Goose:
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!