Mehrere Tabellen in eine neue Tabelle in PostGIS zusammenführen

12

Ich möchte eine Reihe von einzelnen Tabellen in PostGIS zu einer neuen Tabelle zusammenführen. Dies ist eine einfache Aufgabe bei der Arbeit mit Shapefile-Daten, ich bin jedoch nicht sicher, wie dies in PostGIS geschehen soll. Jede Hilfe wäre sehr dankbar. Ich denke, ich benutze Append, bin mir aber nicht sicher, wo ich anfangen soll.

Ryan Garnett
quelle

Antworten:

16

(Pre-Flight-Check: Sind Attribute in allen Originaltabellen identisch? Ist der Geometrietyp in allen Tabellen genau gleich?)

Du kannst entweder

  1. Erstellen Sie zuerst die (leere) Tabelle und verwenden Sie dann INSERT INTO ... SELECT ... FROM, um alle Daten aus jeder der Originaltabellen in die zusammengeführte Tabelle zu übernehmen.
  2. Erstellen Sie die neue Tabelle aus einer großen UNION-Anweisung.

Für 1 könnte es gehen:

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;

und so weiter...

Für 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
quelle
Danke Micha, ich werde es versuchen. Ja, alle Tabellen haben dasselbe Attribut und denselben Geometrietyp.
Ryan Garnett
Ich habe es versucht und es wird ein Fehler im Zusammenhang mit dem XY angezeigt. Ich weiß, dass ich etwas Falsches einsetze, da ich nicht sicher bin, was ich dort verwenden soll. Hier ist meine Anfrage und die Ausgangsantwort. Jede Hilfe wäre toll.
Ryan Garnett
CREATE TABLE pbear_pp (ID des seriellen Primärschlüssels, Entitätsname varchar (40)); SELECT AddGeometryColumn ('pbear_pp', 'geom', '- 1', 'polygon', 'XY'); INSERT INTO pbear_pp (Entityname, Geom) SELECT Entityname, Geom FROM nts250k.nts250k_043e_poly; INSERT INTO pbear_pp (Objektname, Geom) SELECT Objektname, Geom FROM nts250k.nts250k_043f_poly; ETC ETC ...
Ryan Garnett
HINWEIS: CREATE TABLE wird implizite Sequenz "pbear_pp_id_seq" für serielle Spalt erstellen "pbear_pp.id" NACHRICHT: CREATE TABLE / PRIMARY KEY wird impliziten Index "pbear_pp_pkey" für die Tabelle "pbear_pp" ERROR erzeugen: für ganzzahlige ungültige Eingabesyntax: "XY"
Ryan Garnett
1
Verwenden Sie 2 anstelle von 'XY', da dieses Argument die Dimensionen angibt.
Lynxlynxlynx