sql >> Databáze >  >> RDS >> PostgreSQL

Pravidlo Postgres Insert Into View s návratovou klauzulí

Mnohem lépe na tom je použití INSTEAD OF INSERT spusťte zde:

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

Kontrola aktuální hodnoty sekvence, abyste viděli, co bylo vloženo do jiné tabulky, je špatné špatné špatné praxe. Nedělejte to, i když jste zde v rámci jedné transakce.

Jste zmateni v otázce RETURNING informace, protože jsem také zmaten, když čtu vaši otázku. Uvnitř funkce použijte INTO klauzule k naplnění lokálně deklarovaných proměnných do záznamových hodnot, které pak můžete použít v následujících příkazech. Mimo funkci použijte RETURNING klauzule stejně jako ve vašem nejvyšším fragmentu kódu.




  1. Jak vrátím datové typy SQL z mého dotazu?

  2. Přidejte dny k datu v SQLite

  3. Google Cloud SQL s protokolem SSL z Compute Engine a/nebo externí sítě

  4. Jak provést více dotazů pomocí příkazu psql z bash shell?