sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL Update-trigger

Zoals @SpartanElite opmerkte , activeer je een eindeloze lus.

Vereenvoudig de triggerfunctie:

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;
  • Toewijzen aan NEW direct. Geen WHERE in dit geval.
  • Je moet dubbele aanhalingstekens illegale kolomnamen. Het is beter om zulke namen niet te gebruiken.
    Recent gerelateerd antwoord.
  • Code voor invoegen en upgraden is hetzelfde. Ik vouwde in één codepad.

Gebruik een BEFORE trekker. Op deze manier kunt u de kolommen van de activerende rij direct voor . bewerken ze zijn opgeslagen:

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

Echter

Als je probeert alleen een functioneel afhankelijke waarde in de tabel te behouden (en er zijn geen andere overwegingen):Niet doen . Gebruik in plaats daarvan een weergave of een gegenereerde kolom:

Dan heb je dit allemaal niet nodig.



  1. Hoe gegevens uit een pl/sql-functie te halen als een parameter meer dan één waarde heeft in functie met enkele parameters?

  2. Hoe verander ik MySQL-tabelnamen op de Linux-server zodat ze niet hoofdlettergevoelig zijn?

  3. Tekstvak automatisch vullen, afhankelijk van de dropdown-waarde

  4. Onjuiste tekenreekswaarde in python+django+Mysql