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

Spouštěč aktualizace PostgreSQL

Jak upozornil @SpartanElite , spouštíte nekonečnou smyčku.

Zjednodušte funkci spouštění:

CREATE OR REPLACE FUNCTION set_angle()
  RETURNS TRIGGER AS
$func$
BEGIN
   NEW."rotationAngle" := degrees(
                             ST_Azimuth(
                                ST_StartPoint(NEW.the_geom)
                              , ST_EndPoint(NEW.the_geom)
                             )
                          ) - 90;
   RETURN NEW;
END
$func$ LANGUAGE plpgsql;
  • Přiřadit k NEW přímo. Žádné WHERE v tomto případě.
  • Musíte dvojité uvozovky nelegálních názvů sloupců. Pro začátek je lepší takové názvy nepoužívat.
    Nedávné související odpověď.
  • Kód pro vložení a upgrade je stejný. Složil jsem do jedné kódové cesty.

Použijte BEFORE spoušť. Tímto způsobem můžete upravit sloupce spouštěcího řádku přímo před jsou uloženy:

CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();

Nicméně

Pokud pouze se snažíte zachovat funkčně závislou hodnotu v tabulce (a nejsou zde žádné další úvahy):Ne . Místo toho použijte zobrazení nebo vygenerovaný sloupec:

Pak nic z toho nepotřebujete.



  1. Oracle:Dny mezi dvěma daty a Vyloučit pracovní dny, jak zacházet se zápornými čísly

  2. Plugin '0' není načten

  3. Soubor pro načtení souboru Mysql CSV

  4. SQL Datediff - najít datované datum mezi řádky