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

Di chuyển trình kích hoạt từ Oracle 11g sang Postgresql 8.4

Trình kích hoạt trong Postgres không cung cấp mã trình kích hoạt trực tiếp, nhưng gọi một chức năng kích hoạt , có thể được gọi từ bất kỳ số lượng trình kích hoạt nào, mặc dù chúng thường được tùy chỉnh cho một sự kiện cụ thể trên một bảng cụ thể.

Chức năng kích hoạt:

CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
  RETURNS trigger AS
$func$
BEGIN

INSERT INTO some_tbl(key, name, describe)   -- or some_other_tbl?
VALUES (OLD.key, OLD.name, OLD.describe);

RETURN OLD;

END
$func$ LANGUAGE plpgsql 

Trình kích hoạt:

CREATE TRIGGER foo         -- not:  "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
  • Đặt nó thành AFTER kích hoạt để đơn giản hóa. A BEFORE trình kích hoạt sẽ phải RETURN NEW để cập nhật hoạt động, nhưng NEW không hiển thị trong DELETE Kích hoạt. Vì vậy, bạn cần IF TG_OP = ... vv

  • Luôn cung cấp danh sách mục tiêu cho INSERT tồn tại các câu lệnh. Điều này cũng tệ trong trình kích hoạt Oracle.

  • Bạn có thể có một bảng với serial cột. Chỉ cần không đề cập đến nó trong phần chèn, id tiếp theo từ chuỗi sẽ được chèn tự động.

Có rất nhiều ví dụ mã ở đây trên SO.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để xử lý một giá trị tùy chọn được trả về bởi một truy vấn bằng cách sử dụng thùng postgres?

  2. Tortoise ORM cho Python không có quan hệ trả về của các thực thể (Pyndantic, FastAPI)

  3. Chèn nhiều giá trị ENUM trong PostgreSQL

  4. Ứng dụng đang chạy trong Kubernetes cron job không kết nối với cơ sở dữ liệu trong cùng một cụm Kubernetes

  5. PostgreSQL plpgsql tải các thủ tục hiện tại