Eu tenho duas tabelas no PostGIS, uma tabela point e uma point_buffer. A tabela de pontos possui um campo buffer_distance, com um valor padrão como 200. Agora eu quero alterar a geometria da tabela de buffer sempre que alterar o valor de buffer_distance na minha tabela de pontos. Eu posso fazer isso para uma única linha na minha tabela point_buffer usando o seguinte:
UPDATE point_buffer
SET the_geom = (SELECT ST_Buffer(the_geom,500) FROM point WHERE gid = 1)
FROM point
WHERE point.gid = point_buffer.gid
Mas sempre que estou tentando alterar toda a tabela point_buffer (soltando a cláusula WHERE na minha subconsulta), estou recebendo uma mensagem de erro:
'ERRO: mais de uma linha retornada por uma subconsulta usada como expressão'.
Minha pergunta é: posso alterar a tabela point_buffer inteira de uma só vez? Eu sei que uma opção está usando a for lopp, com o limite superior sendo o valor count da minha tabela de pontos e incrementando o valor point.gid. Mas eu quero fazer isso em SQL simples .
fonte
Você pode usar uma exibição, mas também pode usar gatilhos para atualizar automaticamente sua tabela de buffer quando modificar a tabela de pontos original. Isso é realmente útil se você não deseja regenerar os buffers toda vez que visualiza sua tabela, pois o cálculo de buffers é uma tarefa que exige muita CPU.
Aqui está um exemplo de código completo que o implementa: uma tabela de pontos e uma tabela point_buffer que são atualizadas automaticamente com base nas modificações da tabela de pontos.
Você pode testá-lo com o QGIS: abra as duas tabelas, entre no modo de edição na tabela de pontos. Mova um ponto ou altere o valor de buffer_distance e toda vez que você salvar, a camada do buffer será atualizada.
aproveitar :)
fonte