PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie man NEW.* an EXECUTE in der Triggerfunktion übergibt

Am besten mit dem USING Klausel von 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;

Und EXECUTE erfordert keine Klammern.
Und Sie wissen, dass Bezeichner in Kleinbuchstaben umgewandelt werden, sofern sie nicht notfalls in Anführungszeichen gesetzt werden (%I statt %s im format() ).

Weitere Einzelheiten: