sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres Insert Into View-regel med returklausul

Du er meget bedre stillet med en INSTEAD OF INSERT trigger her:

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

At kontrollere den aktuelle værdi af en sekvens for at se, hvad der blev indsat i en anden tabel, er dårlig dårlig dårlig øve sig. Selv mens du er her i en enkelt transaktion, skal du ikke gøre det.

Du er forvirret over spørgsmålet om RETURNING information, for jeg bliver også forvirret, når jeg læser dit spørgsmål. Brug INTO inde i en funktion klausul til at udfylde lokalt erklærede variabler til at indeholde postværdier, som du derefter kan bruge i efterfølgende udsagn. Uden for en funktion skal du bruge RETURNING klausul, som du gør i dit øverste kodestykke.




  1. MySQL ALTER TABLE tager lang tid i lille bord

  2. Hvordan laver man en forespørgsel uden store og små bogstaver i Postgresql?

  3. Oprettelse af en app til Django-filmanbefaling ved hjælp af Jaccard-indeks

  4. Doktrin DBAL setParameter() med matrixværdi