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

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

Bạn có thể triển khai điều đó khá thuận tiện với hstore toán tử #= :

Đảm bảo rằng mô-đun bổ sung được cài đặt đúng cách ( một lần mỗi cơ sở dữ liệu), trong một lược đồ được bao gồm trong search_path của bạn :

  • Cách sử dụng toán tử% từ tiện ích mở rộng pg_trgm?
  • Cách tốt nhất để cài đặt hstore trên nhiều lược đồ trong cơ sở dữ liệu Postgres?

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

CREATE OR REPLACE FUNCTION tbl_insup_bef()
  RETURNS TRIGGER AS
$func$
DECLARE
   _prefix CONSTANT text := 'some prepend data'; -- your prefix here
   _prelen CONSTANT int  := 17;  -- length of above string (optional optimization)
   _col text := quote_ident(TG_ARGV[0]);
   _val text;
BEGIN
   EXECUTE 'SELECT $1.' || _col
   USING NEW
   INTO _val;

   IF left(_val, _prelen) = _prefix THEN 
      -- do nothing: prefix already there!
   ELSE
      NEW := NEW #= hstore(_col, _prefix || _val);  
   END IF;

   RETURN NEW;
END
$func$  LANGUAGE plpgsql;

Kích hoạt (sử dụng lại cùng một func cho nhiều bảng):

CREATE TRIGGER insup_bef
BEFORE INSERT OR UPDATE ON tbl
FOR EACH ROW
EXECUTE PROCEDURE tbl_insup_bef('fieldName');  -- unquoted, case-sensitive column name

Liên quan chặt chẽ hơn với giải thích và lời khuyên:

  • Chỉ định một cột với tên cột động
  • Làm cách nào để truy cập trường MỚI hoặc CŨ chỉ được cung cấp tên của trường?
  • Nhận các giá trị từ các cột khác nhau trong một trình kích hoạt chung


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật dấu thời gian khi hàng được cập nhật trong PostgreSQL

  2. Cách kết nối với cơ sở dữ liệu PostgreSQL từ xa thông qua SSL với Python

  3. hàm mảng biginteger

  4. django.db.utils.ProgrammingError:quan hệ app_user không tồn tại trong quá trình kiểm tra management.py

  5. Cập nhật một cột của một bảng với một cột của một bảng khác trong PostgreSQL