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

Postgres Wstaw do reguły widoku z klauzulą ​​zwracającą

Znacznie lepiej jest użyć INSTEAD OF INSERT wyzwalacz tutaj:

CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
DECLARE
  id integer;
BEGIN
  INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
  INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
  RETURN NEW;
END; $$ LANGUAGE PLPGSQL;

CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
  FOR EACH ROW EXECUTE PROCEDURE MyFuncName();

Sprawdzanie bieżącej wartości sekwencji, aby zobaczyć, co zostało wstawione w innej tabeli, jest złe złe złe ćwiczyć. Nawet jeśli jesteś tutaj w jednej transakcji, nie rób tego.

Nie masz pewności co do kwestii RETURNING informacje, ponieważ też jestem zdezorientowany, kiedy czytam twoje pytanie. Wewnątrz funkcji użyj INTO klauzula do wypełniania zadeklarowanych lokalnie zmiennych w celu przechowywania wartości rekordów, które można następnie wykorzystać w kolejnych instrukcjach. Poza funkcją użyj RETURNING tak jak w swoim najwyższym fragmencie kodu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Inny db do testowania w Django?

  2. Błąd podczas instalacji Psycopg2 na MacOS 10.9.5

  3. Funkcja zastępowania encji PostgreSQL w HTML

  4. Jak zbudować tabelę znormalizowaną z pliku tekstowego zdenormalizowanego?

  5. Jak działa date_part() w PostgreSQL