PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trình kích hoạt cập nhật PostgreSQL

Như @SpartanElite đã chỉ ra , bạn đang kích hoạt một vòng lặp vô tận.

Đơn giản hóa chức năng kích hoạt:

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;
  • Gán cho NEW trực tiếp. Không có WHERE trong trường hợp này.
  • Bạn phải trích dẫn kép tên cột bất hợp pháp. Tốt hơn là không sử dụng những tên như vậy để bắt đầu bằng.
    Gần đây câu trả lời liên quan.
  • Mã để chèn và nâng cấp giống nhau. Tôi đã xếp thành một đường dẫn mã.

Sử dụng BEFORE Kích hoạt. Bằng cách này, bạn có thể chỉnh sửa trực tiếp các cột của hàng kích hoạt trước chúng được lưu:

CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();

Tuy nhiên

Nếu bạn chỉ đang cố gắng duy trì một giá trị phụ thuộc chức năng trong bảng (và không có cân nhắc nào khác): Không . Thay vào đó, hãy sử dụng một chế độ xem hoặc một cột đã tạo:

Sau đó, bạn không cần bất kỳ điều này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm kiếm toàn văn kể từ PostgreSQL 8.3

  2. Postgresql:Tạo trình tự

  3. Heroku - kết xuất và tải một bảng vào cơ sở dữ liệu postgres được chia sẻ

  4. Kích hoạt với tên trường động

  5. Cập nhật cột số nguyên từ thành viên jsonb không thành công với:cột thuộc loại số nguyên nhưng biểu thức thuộc loại jsonb