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

Thủ tục kích hoạt Postgres khi chèn bằng cách sử dụng dữ liệu trong các trường được chèn để chèn dữ liệu được tính toán vào trường khác

Tạo hàm kích hoạt:

create or replace function update_calc_column()
  returns trigger
as
$$
begin
  new.x3 := new.x1 + new.x2;
  return new;
end;
$$
language plpgsql;

Tạo trình kích hoạt:

create trigger calc_trigger 
   before insert or update on X
   for each row
   execute procedure update_calc_column();

SQLFiddle: http://sqlfiddle.com/#!15/7ed21/1

Trên đây thực chất là phiên bản rút gọn của ví dụ trong sổ tay
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE

Tuy nhiên, lưu trữ dữ liệu có nguồn gốc như vậy thường không phải là một ý kiến ​​hay. Bạn chỉ cần tạo một dạng xem trả về một cột X3 được định nghĩa là X1 + X2 - ít mã hơn rất nhiều để duy trì và cũng hiệu quả (thực tế là nhiều hơn hiệu quả vì bạn loại bỏ chi phí kích hoạt).

Một tùy chọn khác (kỳ lạ hơn) là sử dụng tiện ích mở rộng hướng đối tượng của Postgres và tạo một cột ảo:

create or replace function x3(data X) --<< yes, the type of the parameter is the name of the table 
   returns integer
as
$$
   select data.x1 + data.x2;
$$
language sql;

Sau đó, bạn có thể sử dụng:

select x.*, x.x3
from x;

SQLFiddle: http://sqlfiddle.com/#!15/53acf/1

Tuy nhiên, điều này có nhược điểm là bạn cần phải rõ ràng chọn x3 cột. Nó sẽ không hiển thị khi sử dụng x.*




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi một ngày thành ngày Julian trong PostgreSQL

  2. Cách khai báo một biến trong truy vấn PostgreSQL

  3. Phiên bản trình điều khiển JDBC và phiên bản của DB có phải khớp chính xác không?

  4. Postgres CTE:loại ký tự thay đổi (255) [] trong thuật ngữ không đệ quy nhưng loại ký tự thay đổi [] tổng thể

  5. Truy vấn PostgreSQL để chọn dữ liệu từ tuần trước?