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

PostgreSQL - задайте стойност на клетка по подразбиране според стойност на друга клетка

Това ене е възможно с обикновен DEFAULT стойност, както ясно е посочено в ръководството:

Стойността е произволен израз без променлива (не са разрешени подзаявки и кръстосани препратки към други колони в текущата таблица).

Можете да използвате спусък вместо това:

CREATE OR REPLACE FUNCTION trg_foo_b_default()
  RETURNS trigger
  LANGUAGE plpgsql AS
$func$
BEGIN
   -- For just a few constant options, CASE does the job:
   NEW.b := CASE NEW.a
               WHEN 'peter'  THEN 'doctor'
               WHEN 'weirdo' THEN 'shrink'
               WHEN 'django' THEN 'undertaker'
               ELSE NULL
            END;

   /*
   -- For more, or dynamic options, consider a lookup table:
   SELECT INTO NEW.b  t.b
   FROM   def_tbl t
   WHERE  t.a = NEW.a;
   */

   RETURN NEW;
END
$func$;


CREATE TRIGGER b_default
BEFORE INSERT ON foo
FOR EACH ROW
WHEN (NEW.b IS NULL AND NEW.a IS NOT NULL)
EXECUTE PROCEDURE trg_foo_b_default();

За да го направите по-ефективен, използвайте WHEN клауза в дефиницията на тригера (достъпна от Postgres 9.0):По този начин функцията за задействане се изпълнява само когато е действително полезна. (Ако приемем, че можем да оставим b IS NULL слайд, ако a IS NULL .)

Работи подобно, нолеко различно мода от DEFAULT стойност.
Със стойност по подразбиране можете изрично да вмъкнете NULL за да отмените по подразбиране. Това не е възможно тук, NULL в b се заменя със стойността, получена от a .



  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. Използване на JSONB в PostgreSQL:Как ефективно да съхранявате и индексирате JSON данни в PostgreSQL

  3. Heroku и Rails:Грешка при зареждане на Gem с Postgres, но е посочена в GEMFILE

  4. Как да изчистите и преинсталирате postgresql на ubuntu?

  5. Защо не мога да изключа зависими колони от „GROUP BY“, когато агрегирам по ключ?