sql >> Databáze >  >> RDS >> PostgreSQL

Spouštěč s názvem dynamického pole

Můžete to poměrně pohodlně implementovat pomocí hstore operátor #= :

Ujistěte se, že je přídavný modul správně nainstalován (jednou na databázi), ve schématu, které je součástí vaší search_path :

  • Jak použít operátor % z rozšíření pg_trgm?
  • Nejlepší způsob, jak nainstalovat hstore na více schémat v databázi Postgres?

Spouštěcí funkce:

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;

Spustit (znovu použít stejnou funkci pro více tabulek):

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

Úzce souvisí s dalším vysvětlením a radami:

  • Přiřazení sloupce s názvem dynamického sloupce
  • Jak získat přístup k NOVÉMU nebo STARÉmu poli pouze s názvem pole?
  • Získejte hodnoty z různých sloupců v obecném spouštěči


  1. Jak získat všechny tabulky, které mají omezení primárního klíče vytvořené v databázi SQL Server - SQL Server / TSQL výukový program 57

  2. Automatizované testování procesu upgradu serveru MySQL/MariaDB/Percona

  3. JDBC Create Table Příklad použití příkazu

  4. Hlášení využití možností databáze/balíčků