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

Jak předat NEW.* do EXECUTE ve funkci spouštění

Nejlépe pomocí USING klauzule 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;

A EXECUTE nevyžaduje závorky.
A jste si vědomi toho, že identifikátory jsou složeny na malá písmena, pokud nejsou uvedeny v uvozovkách (%I místo %s ve format() ).

Další podrobnosti:




  1. PostgreSQL vytváří index na přetypování od řetězce k datu

  2. Jak vypočítat procentuální nárůst z předchozího řádku/den po komplexním Group By?

  3. Existuje automatický způsob, jak vygenerovat skript vrácení při vkládání dat pomocí LINQ2SQL?

  4. jak získat data jednoho sloupce z jedné tabulky do jiné tabulky jako různé sloupce v PL/SQL