PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Задействане с име на динамично поле

Можете да приложите това доста удобно с hstore оператор #= :

Уверете се, че допълнителният модул е ​​инсталиран правилно (веднъж на база данни), в схема, която е включена във вашия search_path :

  • Как да използвам оператор % от разширението pg_trgm?
  • Най-добрият начин да инсталирате hstore на множество схеми в база данни на Postgres?

Функция за задействане:

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;

Задействане (използвайте повторно същата функция за множество таблици):

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

Тясно свързано с повече обяснения и съвети:

  • Присвояване на колона с динамично име на колона
  • Как да получите достъп до НОВО или СТАРО поле, като се има предвид само името на полето?
  • Вземете стойности от различни колони в общ тригер


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавя нова колона в таблица след 2-ра или 3-та колона в таблицата с помощта на postgres?

  2. PostgreSQL ОПИСАНИЕ ТАБЛИЦА Еквивалент

  3. Преобразувайте дата в Юлиански ден в PostgreSQL

  4. как да създадете ISO-8601 григорианска таблица с дати в postgres

  5. Извличане на дата (гггг/мм/дд) от времеви печат в PostgreSQL