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

Come passare NEW.* a ESEGUIRE nella funzione trigger

Meglio con USING clausola di EXECUTE :

CREATE FUNCTION foo ()
  RETURNS trigger AS
$func$
BEGIN
  IF TG_OP = 'INSERT' THEN
     EXECUTE format('INSERT INTO %s SELECT $1.*'
                  , 'samples_' || left(NEW.md5, 2);
     USING NEW;
  END IF;
  RETURN NULL;
END
$func$ LANGUAGE plpgsql;

E EXECUTE non richiede parentesi.
E sei consapevole che gli identificatori sono piegati in minuscolo a meno che non siano citati ove necessario (%I invece di %s in format() ).

Maggiori dettagli: