जैसा कि @SpartanElite ने बताया , आप एक अंतहीन लूप ट्रिगर कर रहे हैं।
ट्रिगर फ़ंक्शन को सरल बनाएं:
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;
NEW
को असाइन करें सीधे। नहींWHERE
इस मामले में।- आपको चाहिए डबल-कोट अवैध कॉलम नाम। शुरुआत में ऐसे नामों का उपयोग न करना ही बेहतर है।
हाल संबंधित उत्तर। - इन्सर्ट और अपग्रेड के लिए कोड समान है। मैं एक कोड पथ में बदल गया।
BEFORE
का उपयोग करें चालू कर देना। इस तरह आप ट्रिगरिंग पंक्ति के कॉलम को सीधे पहले . संपादित कर सकते हैं वे सहेजे गए हैं:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
हालांकि
अगर आप तालिका में केवल कार्यात्मक रूप से निर्भर मान को बनाए रखने की कोशिश कर रहे हैं (और कोई अन्य विचार नहीं हैं):नहीं . इसके बजाय किसी दृश्य या जेनरेट किए गए कॉलम का उपयोग करें:
तब आपको इसकी कोई आवश्यकता नहीं है।