sql >> Database >  >> RDS >> PostgreSQL

Postgres-regel invoegen in weergave met terugkerende clausule

Je bent veel beter af met een INSTEAD OF INSERT trigger hier:

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

De huidige waarde van een reeks controleren om te zien wat er in een andere tabel is ingevoegd, is slecht slecht slecht oefening. Zelfs als u hier in een enkele transactie bent, doe het niet.

Je bent in de war over de kwestie van RETURNING informatie, omdat ik ook in de war ben als ik uw vraag lees. Gebruik binnen een functie de INTO om lokaal gedeclareerde variabelen in te vullen om recordwaarden te bevatten die u vervolgens in volgende instructies kunt gebruiken. Gebruik buiten een functie de RETURNING clausule zoals u doet in uw meest gebruikte codefragment.




  1. MySQL-selectiequery is vreselijk traag

  2. Login script werkt niet op live server

  3. mysql jaar uit datumnotatie halen

  4. Java - Uitzondering in hoofdthread java.lang.Error:onopgeloste compilatieproblemen