sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL Update trigger

Som @SpartanElite påpekade , utlöser du en oändlig loop.

Förenkla 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;
  • Tilldela till NEW direkt. Ingen WHERE i det här fallet.
  • Du måste olagliga kolumnnamn med dubbla citattecken. Bättre att inte använda sådana namn till att börja med.
    Senaste relaterat svar.
  • Koden för infogning och uppgradering är densamma. Jag vek till en kodsökväg.

Använd en BEFORE utlösare. På så sätt kan du redigera kolumner i den utlösande raden direkt före de sparas:

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

Men

Om du försöker bara behålla ett funktionellt beroende värde i tabellen (och det finns inga andra överväganden):Gör inte . Använd en vy eller en genererad kolumn istället:

Då behöver du inget av detta.



  1. Varför får jag ett felmeddelande om att det inte gick att ansluta till servern för postgres i Mac OS Lion?

  2. Postgresql join_collapse_limit och tid för frågeplanering

  3. Rätt sätt att fråga om mysql_num_rows i PHP

  4. Hur man loopar in en lagrad funktion på MySQL korrekt?