sql >> Databasteknik >  >> RDS >> PostgreSQL

Ändlös slinga i triggerfunktion

ANELSE gren kan förenklas radikalt. Men ett par saker till är ineffektiva / felaktiga / farliga:

CREATE OR REPLACE FUNCTION sample_trigger_func()
  RETURNS TRIGGER AS
$func$
BEGIN
   IF TG_OP = 'DELETE' THEN
      RAISE INFO 'OLD: %', OLD.name;

      EXECUTE format('INSERT INTO %I SELECT ($1).*', TG_TABLE_NAME || '_deletes')
      USING OLD #= hstore('{mod_op, mod_datetime}'::text[]
                         , ARRAY[left(TG_OP, 1), now()::text]);
      RETURN OLD;
   ELSE  -- insert, update
      NEW.mod_op       := left(TG_OP, 1);
      NEW.mod_datetime := now();

      RETURN NEW;
   END IF;
END
$func$  LANGUAGE plpgsql;

Jag har lagt till ett par andra förbättringar medan jag håller på. Och själva utlösaren ska se ut så här:

CREATE TRIGGER insupdel_bef
BEFORE INSERT OR UPDATE OR DELETE ON table_name
FOR EACH ROW EXECUTE PROCEDURE sample_trigger_func();

SQL-fiol.




  1. XAMPP/MySQL:kunde inte öppna tabellutrymmesfilen för en tabell .\mysql\innodb_index_stats.ibd efter omstart av MySQL

  2. En för-ifylld databas fungerar inte vid API 28 ger inget sådant tabellundantag

  3. MYSQL Case i select-satsen för kontroll av null

  4. Hur kopplar man ihop lift och MySQL?