Mesclar várias tabelas em uma nova tabela no PostGIS

13

Eu estou olhando para mesclar um número de tabelas individuais em uma nova tabela no PostGIS. Essa é uma tarefa fácil ao trabalhar com dados do Shapefile, mas não tenho certeza de como fazer isso no PostGIS. Qualquer ajuda seria muito apreciada. Acho que uso o Append, mas não tenho certeza nem por onde começar.

Ryan Garnett
fonte

Respostas:

17

(Verificação antes do voo: os atributos são idênticos em todas as tabelas originais? O tipo de geometria é exatamente o mesmo em todas as tabelas?)

Você também pode

  1. crie a tabela (vazia) primeiro e use INSERT INTO ... SELECT ... FROM para obter todos os dados de cada tabela original na tabela mesclada.
  2. Crie a nova tabela a partir de uma grande instrução UNION.

Para 1, pode ser:

CREATE TABLE merged (id serial primary key, attrib1 integer, attrib2 varchar(15),....);
SELECT AddGeometryColumn('merged','geom',<SRID>,'<FEATURE_TYPE>,'XY');
INSERT INTO merged (attrib1, attrib2, ...., geom) SELECT attribA, attribB,...,geom FROM table_1;
INSERT INTO merged (attrib1, attrib2, ...., geom) SELECT attribA, attribB,...,geom FROM table_2;

e assim por diante...

Para a opção 2:

CREATE TABLE merged AS( 
SELECT attribA, attribB,...,geom FROM table_1
UNION 
SELECT attribA, attribB,...,geom FROM table_2
UNION
.... 
);
SELECT Populate_Geometry_Columns('merged'::regclass);

Micha HTH

Micha
fonte
Obrigado Micha, vou tentar isso. Sim, todas as tabelas têm o mesmo atributo e são do mesmo tipo de geometria. Obrigado mais uma vez ...
Ryan Garnett
Eu tentei e estou recebendo um erro associado ao XY. Eu sei que estou colocando a coisa errada, pois não tenho certeza do que devo usar lá. Aqui está minha consulta e a resposta de saída. Qualquer ajuda seria ótimo.
Ryan Garnett
CREATE TABLE pbear_pp (chave primária serial de identificação, nome da entidade varchar (40)); SELECT AddGeometryColumn ('pbear_pp', 'geom', '- 1', 'polígono', 'XY'); INSERIR EM pbear_pp (nome da entidade, geom) SELECT nome da entidade, geom FROM nts250k.nts250k_043e_poly; INSERIR EM pbear_pp (nome da entidade, geom) SELECT nome da entidade, geom FROM nts250k.nts250k_043f_poly; ETC ...
Ryan Garnett
AVISO: CREATE TABLE criará a sequência implícita "pbear_pp_id_seq" para a coluna serial "pbear_pp.id" AVISO: CREATE TABLE / PRIMARY KEY criará o índice implícito "pbear_pp_pkey" para a tabela "pbear_pp_pkey" para a tabela "pbear_pp" ERRO: sintaxe de entrada inválida para o número inteiro: "XY"
Ryan Garnett
1
use 2 em vez de 'XY', pois esse argumento especifica as dimensões.
Lynxlynxlynx