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

Làm cách nào để tạo một trình kích hoạt để cập nhật một cột trong một bảng khác?

mydatabase là một cái tên đáng tiếc cho một lược đồ .

Hàm kích hoạt có thể trông giống như sau:

CREATE OR REPLACE FUNCTION trg_upaft_upd_trip()
  RETURNS TRIGGER AS
$func$
BEGIN

UPDATE mydatabase.trip t    -- "mydatabase" = schema name (?!)
SET    last_updated = now()
WHERE  t.id = NEW.trip_id   -- guessing column names      

RETURN NULL;                -- calling this AFTER UPDATE

END
$func$  LANGUAGE plpgsql;

Và cần được sử dụng trong trình kích hoạt trên mọi bảng có liên quan (không phải trên trip chính nó):

CREATE TRIGGER upaft_upd_trip
AFTER UPDATE ON mydatabase.trip_detail
FOR EACH ROW EXECUTE PROCEDURE trg_upaft_upd_trip();

Bạn cũng cần bao gồm INSERTDELETE (và có thể là COPY ) trên tất cả các bảng phụ ...

Cách làm này tiềm ẩn nhiều điểm thất bại. Thay vào đó, hãy xem xét một truy vấn hoặc chế độ xem tính toán last_updated mới nhất từ các bảng phụ động. Nếu bạn cập nhật thường xuyên, đây có thể là cách tiếp cận ưu việt.
Nếu bạn hiếm khi UPDATESELECT thường thì cách tiếp cận đầu tiên của bạn có thể trả tiền.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thứ tự của các bảng trong một phép nối có quan trọng không khi các phép nối LEFT (bên ngoài) được sử dụng?

  2. SQL - thứ tự của các điều kiện OR có quan trọng không?

  3. Tương đương với hàm FOUND_ROWS () trong Postgresql

  4. Làm cách nào để ngăn chặn việc đưa vào SQL bằng chuỗi truy vấn JSONB tùy ý được cung cấp bởi máy khách bên ngoài?

  5. Postgres:trích xuất văn bản lên đến Ký tự thứ N trong một chuỗi