sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man skickar NEW.* till EXECUTE i triggerfunktionen

Bäst med USING sats av 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;

Och EXECUTE kräver inte parentes.
Och du är medveten om att identifierare viks till små bokstäver om de inte citeras där det behövs (%I istället för %s i format() ).

Mer information:




  1. Hur konverterar man tidszoner i Oracle?

  2. Bör VARCHAR-kolumner placeras i slutet av tabelldefinitioner i MySQL?

  3. Funktionsalias för Postgres standardfunktion

  4. Importera psycopg2-biblioteket har inte laddats:libssl.1.0.0.dylib