PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Pemicu dengan nama bidang dinamis

Anda dapat menerapkannya dengan lebih mudah dengan hstore operator #= :

Pastikan modul tambahan terpasang dengan benar (sekali per database), dalam skema yang disertakan dalam search_path :

  • Bagaimana cara menggunakan % operator dari ekstensi pg_trgm?
  • Cara terbaik untuk menginstal hstore pada beberapa skema dalam database Postgres?

Fungsi pemicu:

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;

Pemicu (gunakan kembali fungsi yang sama untuk beberapa tabel):

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

Berhubungan erat dengan lebih banyak penjelasan dan saran:

  • Penugasan kolom dengan nama kolom dinamis
  • Bagaimana cara mengakses bidang BARU atau LAMA hanya dengan nama bidang?
  • Dapatkan nilai dari berbagai kolom di pemicu umum


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengatur Koneksi Jarak Jauh ke PostgreSQL

  2. Instal PostgreSQL di Ubuntu 20.04

  3. Peran tidak ada dan tidak dapat membuat database saat menggunakan PostgreSQL

  4. perbedaan antara localhost dan postgres untuk Host di buruh pelabuhan

  5. Mendapatkan nama fungsi saat ini di dalam fungsi dengan plpgsql