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

Funkcja wyzwalacza PostgreSQL 9.3 do wstawienia do tabeli ze sparametryzowaną nazwą

CREATE FUNCTION log_roll_test()
  RETURNS trigger AS
$func$
BEGIN
   EXECUTE format('INSERT INTO %I SELECT ($1).*'
                , to_char(NEW.updt_ts, '"log"WW'))   -- child table name
   USING NEW;
   RETURN NULL;
END
$func$ LANGUAGE plpgsql;

Nie możesz odwołać się do NEW wewnątrz ciągu zapytania. NEW jest widoczny w treści funkcji, ale nie w EXECUTE środowisko. Najlepszym rozwiązaniem jest przekazanie wartości w USING klauzula.

Podstawiłem również odpowiednik to_char(NEW.updt_ts, '"log"WW') dla nazwy tabeli. to_char() jest tu szybszy i prostszy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odpytywanie tablicy obiektów JSON w Postgres

  2. Django Łączące __nieakcentowe i __wyszukiwania wyszukiwania

  3. Błąd Castle Activerecord to „relacja nie istnieje” na Postgresql?

  4. Zaznaczanie wszystkich rekordów, jeśli rekord ma którykolwiek z identyfikatorów z tablicy

  5. Jak wyświetlić wszystkie tabele ze zmianami danych w ciągu ostatnich 24 godzin?