Seperti yang @SpartanElite tunjukkan , Anda memicu pengulangan tanpa akhir.
Sederhanakan fungsi pemicu:
CREATE OR REPLACE FUNCTION set_angle()
RETURNS TRIGGER AS
$func$
BEGIN
NEW."rotationAngle" := degrees(
ST_Azimuth(
ST_StartPoint(NEW.the_geom)
, ST_EndPoint(NEW.the_geom)
)
) - 90;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;
- Tetapkan ke
NEW
secara langsung. Tidak adaWHERE
dalam hal ini. - Anda harus kutip ganda nama kolom ilegal. Lebih baik tidak menggunakan nama seperti itu untuk memulai.
Terbaru jawaban terkait. - Kode untuk insert &upgrade sama. Saya melipat menjadi satu jalur kode.
Gunakan BEFORE
pemicu. Dengan cara ini Anda dapat mengedit kolom dari baris pemicu secara langsung sebelum mereka disimpan:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Namun
Jika Anda hanya mencoba untuk mempertahankan nilai yang bergantung secara fungsional dalam tabel (dan tidak ada pertimbangan lain):Jangan . Gunakan tampilan atau kolom yang dihasilkan sebagai gantinya:
Maka Anda tidak memerlukan semua ini.