sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres Insert Into View-regel med returklausul

Du är mycket bättre av att använda en INSTEAD OF INSERT trigger här:

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();

Att kontrollera det aktuella värdet för en sekvens för att se vad som infogats i en annan tabell är dåligt dåligt dåligt öva. Även när du är här i en enda transaktion, gör det inte.

Du är förvirrad angående frågan om RETURNING information, eftersom jag också blir förvirrad när jag läser din fråga. Inuti en funktion använd INTO sats för att fylla i lokalt deklarerade variabler för att hålla postvärden som du sedan kan använda i efterföljande uttalanden. Utanför en funktion, använd RETURNING som du gör i ditt översta kodavsnitt.




  1. PDO, $_GET och SELECTing från MySQL Database

  2. System.ArgumentException:Tabelltypsparametern måste ha ett giltigt typnamn

  3. Jag får ett pg-fel när jag försöker förstöra en kontroller

  4. sqlalchemy kör inte Kommentar på schema