PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql wstaw wyzwalacz, aby ustawić wartość

Masz rację, że potrzebujesz wyzwalacza, ponieważ ustawienie domyślnej wartości dla kolumny nie zadziała - wartości domyślne działają tylko dla null wartości i nie pomagają w zapobieganiu pustym wartościom.

W postgresie jest kilka kroków do utworzenia wyzwalacza:

Krok 1:Utwórz funkcję, która zwraca typ trigger :

CREATE FUNCTION my_trigger_function()
RETURNS trigger AS $$
BEGIN
  IF NEW.C1 IS NULL OR NEW.C1 = '' THEN
    NEW.C1 := 'X';
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql

Krok 2:utwórz wyzwalacz, który uruchamia się przed insert, który umożliwia zmianę wartości przed ich wstawieniem, która wywołuje powyższą funkcję:

CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()

I gotowe.

Zobacz powyższy kod wykonywany na SQLFIddle, który pokazuje, że działa poprawnie!

Wspomniałeś w komentarzu, że wartość 'X' jest pobierany z podzapytania. Jeśli tak, zmień odpowiedni wiersz, tak aby wyglądał następująco:

NEW.C1 := (select some_column from some_table where some_condition);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można zainstalować PG gem na moim Macu z Mavericks

  2. Uwierzytelnianie hasła Postgres nie powiodło się

  3. Argumenty wiersza poleceń PSQL w skrypcie DO

  4. Transpozycja wyniku sql, tak aby jedna kolumna przechodziła do wielu kolumn

  5. Korzystanie z klauzuli EXCEPT w PostgreSQL