Fusionner plusieurs tables dans une nouvelle table dans PostGIS

13

Je cherche à fusionner un certain nombre de tables individuelles dans une nouvelle table dans PostGIS. C'est une tâche facile lorsque vous travaillez avec des données Shapefile, mais je ne sais pas comment procéder dans PostGIS. Toute aide serait grandement appréciée. Je pense que j'utilise Append, mais je ne sais même pas par où commencer.

Ryan Garnett
la source

Réponses:

17

(Contrôle avant vol: les attributs sont-ils identiques dans toutes les tables d'origine? Le type de géométrie est-il exactement le même dans toutes les tables?)

Vous pouvez soit

  1. créez d'abord la table (vide), puis utilisez INSERT INTO ... SELECT ... FROM pour obtenir toutes les données de chacune des tables d'origine dans celle fusionnée.
  2. Créez la nouvelle table à partir d'une grande instruction UNION.

Pour 1, cela pourrait aller:

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;

etc...

Pour l'option 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);

HTH, Micha

Micha
la source
Merci Micha, je vais essayer ça. Oui, toutes les tables ont le même attribut et elles sont du même type de géométrie. Merci encore ...
Ryan Garnett
J'ai essayé et je reçois une erreur associée au XY. Je sais que je mets la mauvaise chose, car je ne suis pas sûr de ce que je devrais utiliser là-bas. Voici ma requête et la réponse de sortie. Toute aide est la bienvenue.
Ryan Garnett
CREATE TABLE pbear_pp (id clé primaire série, nom d'entité varchar (40)); SELECT AddGeometryColumn ('pbear_pp', 'geom', '- 1', 'polygone', 'XY'); INSERT INTO pbear_pp (nom_entité, geom) SELECT nom_entité, geom FROM nts250k.nts250k_043e_poly; INSERT INTO pbear_pp (nom_entité, geom) SELECT nom_entité, geom FROM nts250k.nts250k_043f_poly; ETC ETC ...
Ryan Garnett
AVIS: CREATE TABLE créera une séquence implicite "pbear_pp_id_seq" pour la colonne série "pbear_pp.id" AVIS: CREATE TABLE / PRIMARY KEY créera un index implicite "pbear_pp_pkey" pour la table "pbear_pp" ERREUR: syntaxe d'entrée non valide pour un entier: "XY"
Ryan Garnett
1
utilisez 2 au lieu de 'XY' car cet argument spécifie les dimensions.
lynxlynxlynx