Làm thế nào để xác định thứ tự thực hiện kích hoạt trong PostgreSQL?


7

Tôi đang sử dụng phân vùng dựa trên thời gian "cổ điển" bằng cách sử dụng kích hoạt. Tôi đã tìm thấy một nhu cầu cho một kích hoạt riêng biệt, chạy trên bảng gốc.

CREATE TABLE twitter_interactions(...);
CREATE OR REPLACE FUNCTION insert_twitter_interactions ...;
CREATE TRIGGER insert_twitter_interactions_trig
  BEFORE INSERT OR UPDATE on twitter_interactions
  FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();

CREATE OR REPLACE FUNCTION maintain_data_pointers ...;
CREATE TRIGGER maintain_data_pointers_trig
  BEFORE INSERT OR UPDATE on twitter_interactions
  FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();

Tôi chưa xác minh đầy đủ, nhưng tôi nghi ngờ logic phân vùng chạy trước khi kích hoạt duy trì và vì hàng không kết thúc trong bảng cha, nên kích hoạt thứ 2 không bao giờ kích hoạt.

Điều gì xảy ra nếu tôi muốn chạy AFTER INSERT OR UPDATEnhư vậy? Vì hàng không đưa nó vào bảng gốc, nên tôi không thể thực hiện logic sau.

Câu trả lời:


10

Tôi không thể nói nó tốt hơn hướng dẫn sử dụng ở đây :

Nếu bất kỳ BEFOREhoặc INSTEAD OFkích hoạt trả về NULL, hoạt động bị bỏ qua cho hàng đó và các kích hoạt tiếp theo không được kích hoạt (cho hàng đó).

Không kích hoạt (theo thứ tự chữ cái) sau này trên cùng một sự kiện cũng như bất kỳ AFTERkích hoạt nào sẽ kích hoạt, nếu BEFOREkích hoạt hủy bỏ.


RTFM cũ tốt ... Nhưng đọc tuyên bố, nếu kích hoạt chèn là cuối cùng , thì các kích hoạt khác có thể kích hoạt và hoàn thành. Tôi sẽ điều tra thêm. Cảm ơn!
François Beausoleil

@ FrançoisBeausoleil: Đúng vậy. Bạn có thể siết trong các trình kích hoạt khác trên cùng một sự kiện trước khi bạn hủy INSERT với RETURN NULL. Bạn cũng có thể đặt thêm mã chương trình vào cùng chức năng kích hoạt.
Erwin Brandstetter

8

PostgreSQL thực thi các kích hoạt theo thứ tự bảng chữ cái theo tên. Vì vậy, hãy đảm bảo sử dụng tên có được chúng theo thứ tự bạn muốn. Từ các tài liệu

SQL chỉ định rằng nhiều kích hoạt sẽ được kích hoạt theo thứ tự thời gian tạo. PostgreSQL sử dụng thứ tự tên, được đánh giá là thuận tiện hơn.

BTW SQL của bạn tạo ra cùng một kích hoạt hai lần.


Lỗi sao chép đơn giản. Đã viết SQL ở trên cho mục đích minh họa. Cảm ơn câu trả lời!
François Beausoleil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.