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

PostgreSQL Update trigger

Som @SpartanElite påpegede , udløser du en endeløs løkke.

Forenkle triggerfunktionen:

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;
  • Tildel til NEW direkte. Ingen WHERE i dette tilfælde.
  • Du skal ulovlige kolonnenavne med dobbelte anførselstegn. Bedre ikke at bruge sådanne navne til at begynde med.
    Seneste relateret svar.
  • Kode til indsættelse og opgradering er den samme. Jeg foldede ind i én kodesti.

Brug en BEFORE udløser. På denne måde kan du redigere kolonner i den udløsende række direkte før de er gemt:

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

Men

Hvis du forsøger bare at fastholde en funktionelt afhængig værdi i tabellen (og der er ingen andre overvejelser):Lad være med . Brug en visning eller en genereret kolonne i stedet:

Så behøver du ikke noget af dette.



  1. Opret en liste over alle dage pr. måned og del værdien ligeligt til hver dag

  2. Hvordan kan jeg sende argumenter til QThread Worker-klassen?

  3. Postgresql Windows, er der en standardadgangskode?

  4. MySQL fjerner nogle fremmednøgler