Daha çox

Birdən çox sxem üçün bir tetikleyici necə yaradılır?


PostgreSQL verilənlər bazalarımdan biri eyni quruluşu paylaşan müxtəlif sxemlər ehtiva edir.

- şema bölgəsi_a CƏDVƏL YARATIN region_a.point (gid serialı NULL DEYİL, geom həndəsi (point, SRID), attribute_sample varchar (255), CONSTRAINT point_pkey PRIMARY KEY (gid)); CƏDVƏL YARATIN region_a.polygon (gid serialı NULL DEYİL, geom həndəsəsi (çoxbucaqlı, SRID), atribut varchar (255), CONSTRAINT polygon_pkey PRIMARY KEY (gid)); - şema region_b CƏDVƏL YARADIN region_b.point (gid serial NULL DEYİL, geom həndəsə (point, SRID), attribute_sample varchar (255), CONSTRAINT point_pkey PRIMARY KEY (gid)); CƏDVƏL YARATIN region_b.polygon (gid serialı NULL DEYİL, geom həndəsəsi (çoxbucaqlı, SRID), atribut varchar (255), CONSTRAINT polygon_pkey PRIMARY KEY (gid)); - region_c şeması -…

İndi bir sxem içərisində çoxbucaqlı xüsusiyyətlərə nümunə nöqtələri əlavə etmək üçün necə bir tətikçi yaradacağımı düşünürəm.

FUNKSİYANI YARATIN VƏ DƏYİŞİNİZ sample_attribute_from_polygon () RETURNS tetikleyiciyi AS $ body $ BEGIN NEW.attribute_sample = (SEÇİNƏN atributu FROM poligon WHERE ST_Within (NEW.geom, polygon.geom)); QAYIT YENİ; SON; $ body $ LANGUAGE plpgsql; TRIGGER sample_attribute_from_polygon_tg HƏR SIRA İCRA PROSEDÜRÜ ÜÇÜN nöqtəyə INSERT VƏ YENİLƏNMƏSİNDƏN YARATIN sample_attribute_from_polygon ();

Bütün sxemlər üçün eyni tetiği istifadə etməyin bir yolu varmı? Şemanın adını dəyişdirərkən də işləyən bir həll axtarıram.


Bir trigger funksiyasını istədiyiniz qədər cədvələ bağlaya bilərsiniz; yalnız icra edinTRIGGER YARADINhər bağlama üçün bəyanat. İfadənizdəki cədvəl adını şemaya uyğunlaşdırdığınızdan əmin olun (A.point-ə ƏMƏK VƏ YENİLƏNMƏDƏN ƏVVƏLvə s.) Çox sayda sxeminiz varsa, içərisindəki sətirlər üzərində təkrarlayaraq SQL-i dinamik şəkildə yarada bilərsiniz.məlumat_ şeması.şemata.

Tətikləmə funksiyasının hansı cədvəldə işlədiyinə görə fərqli bir şey etməsi lazımdırsa, cədvəl şemasına və adını ala bilərsinizTG_TABLE_SCHEMATG_TABLE_NAME. (Bütün mövcud dəyişənlər üçün sənədlərə baxın).

Sizin vəziyyətinizdə, dinamik bir tetikleyici funksiyası belə ola bilər:

FUNKSİYANI YARATIN VƏ DƏYİŞİNİZ sample_attribute_from_polygon () RETURNS tetikleyicidir $ body $ BEGIN EXECUTE 'SELECT attribute FROM' || TG_TABLE_SCHEMA || '.polygon WHERE ST_Within ($ 1, polygon.geom) LIMIT 1' NEW.geom'un YENİ.attribute_sample'YƏ KULLANILMASI; QAYIT YENİ; SON; $ body $ LANGUAGE plpgsql;