Nas implementações de banco de dados em clientes ,é muito comum, em alguns casos, implementarmos processos que são disparados automaticamente, como um gatilho ou assim chamado (Trigger) Em muitos dos casos os DBAs tem que criar esses gatilhos vinculados a alguma tabela ou outro artefato no banco de dados do cliente, e para isso o PostgreSQL disponibiliza alguns recursos como o comando CREATE TRIGGER, para podermos criar esses recursos tão uteis no banco de dados.
Para criarmos um banco de dados para utilizar o
PostGIS, podemos executar os seguintes comandos:
Acessando o banco de dados:
sudo -u postgres -h localhost -p 5432 -d nome_do_banco_de_dados
Logo após a criação é possível conectar em sua instância, pelo comando abaixo:
\connect geodatabase;
E as extensões necessárias para trabalhar com dados geoespaciais:
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
Criando uma tabela auxiliar, que por sua vez, vai ser responsável por ter a união de todos os registros da tabela de hidrografias. "Exemplo: Pode ser qualquer tabela espacial".
Criando tabela auxiliar com base na união dos polígonos:
CREATE TABLE hidrografia_poligono_uniao as
select st_union(geom) as geom from hidrogradias_area
Em seguida, podemos criar a função para a trigger, essa função tem um tipo específico, pois diferente das outras funções, ela tem um retorno peculiar de tipo "TRIGGER":
-- Function: public.nova_uniao_poligonos()
-- DROP FUNCTION public.nova_uniao_poligonos();
CREATE OR REPLACE FUNCTION public.nova_uniao_hidrografia_poligono()
RETURNS trigger AS
$BODY$
DECLARE uni_geom geometry; -- Variável para unificação das feições
DECLARE old_geom geometry; -- Geometria que foi a união anterior
BEGIN
--Se o evento for o inserirIF(TG_OP='INSERT') THEN--Relizar a junção do layer de união com o novo insert na tabela de uniãoSELECT ST_Union(geom) into old_geom FROM hidrografia_poligono_uniao;
uni_geom := ST_Union(old_geom, NEW.geom);
--Inserir o resultado da união na tabela auxiliarINSERT INTO hidrografia_poligono_uniao(geom) VALUES (uni_geom);END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Depois de criada a função, é possível vincularmos, por exemplo a uma tabela, que irá conter todos os atributos espaciais unificados.
-- Trigger: nova_gatilho_uniao on public.municipios
-- DROP TRIGGER nova_gatilho_uniao ON public.municipios;
CREATE TRIGGER nova_gatilho_hidrografia_poligono_uniao
AFTER INSERT ON public.hidrogradias_area
FOR EACH ROW EXECUTE PROCEDURE public.nova_uniao_hidrografia_poligono();
Feito esse procedimento, automaticamente quando inserido algum atributo na tabela hidrografias_area, na tabela hidrografia_poligono_uniao, haverá um atributo espacial representando toda extensão hidrográfica existente com apenas uma feição.
Referência:
https://www.postgresql.org/
Para ter acesso aos cursos disponíveis acesse:
Registre-se é grátis -->
www.datakode.com.br
Nenhum comentário foi encontrado.