Daugiau

Kaip sukurti trigerį, norint patikrinti geometrijos pagrįstumą?

Kaip sukurti trigerį, norint patikrinti geometrijos pagrįstumą?


Noriu sukurti trigerį, kad būtų galima patikrinti geometrijos pagrįstumą erdvinėje lentelėje. Aš turiu lentelę:

SUKURTI LENTEL vec vec_geometry (ID bigserial is_valid Boolean, invalid_reason character (128), geom geography)

Kai bandau sukurti trigerio funkciją, gaunu klaidą:

SUKURTI FUNKCIJĄ geom_valid_check () RETURNS suaktyvina AS $ BODY $ su testu kaip id; GRĄŽINTI NENUOL; $ BODY $ LANGUAGE plpgsql PATEKIMAS NETEKA SAUGUMAS; Įvyko klaida: KLAIDA: sintaksės klaida 3 eilutėje arba šalia „WITH“: WITH test as ((SELECT * FROM ST_IsValidDetail (NEW.geom))

Kaip perrašyti funkciją, kad ji veiktų?


Remdamasis dokumentais, įtariu, kad norite atlikti panašius veiksmus

CREATE TABLE vec_geometry (id bigserial, is_valid Boolean, invalid_reason character (128), geom geography); CREATE FUNCTION geom_valid_check () RETURNS paleidžia AS $ geom_valid_check $ DECLARE val valid_detail; BEGIN val: = ST_IsValidDetail (NEW.geom :: Geometrija); NEW.is_valid = galioja (val); NEW.nvalid_reason = priežastis (val); GRĄŽINTI NAUJĄ; GALAS; $ geom_valid_check $ LANGUAGE plpgsql PASTAVI NEBEIGO; CREATE TRIGGER vec_geometry_is_valid PRIEŠ ĮDĖJANT ARBA ATNAUJINANT Vec_geometry KIEKVIENAI EILUTĖMS VYKDYTI PROCEDŪRĄ geom_valid_check (); INSERT INTO vec_geometry VALUES (1, NULL, NULL, ST_GeomFromText ('POLYGON ((0 0, 1 1, 1 2, 1 1, 0 0))'); PASIRINKTI * IŠ vec_geometry;

Pastebėsite, kad jis nemėgina tiesiogiai atnaujinti lentelės, bet keičia NEW eilutę prieš ją įterpiant ar atnaujinant į lentelę.


Žiūrėti video įrašą: ნინო მარდალეიშვილი: ამოცანა გეომეტრიულ აგებაზე.