Объединить несколько таблиц в новую таблицу в PostGIS

13

Я хочу объединить несколько отдельных таблиц в новую таблицу в PostGIS. Это простая задача при работе с данными Shapefile, но я не уверен, как это сделать в PostGIS. Любая помощь будет принята с благодарностью. Я думаю, что я использую Append, но я не уверен, даже с чего начать.

Райан Гарнетт
источник

Ответы:

17

(Предварительная проверка: идентичны ли атрибуты во всех исходных таблицах? Является ли тип геометрии одинаковым во всех таблицах?)

Вы также можете

  1. сначала создайте (пустую) таблицу, затем используйте INSERT INTO ... SELECT ... FROM, чтобы получить все данные из каждой исходной таблицы в объединенную.
  2. Создайте новую таблицу из одного большого оператора UNION.

Для 1 это может пойти:

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;

и так далее...

Для варианта 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, Миха

Миха
источник
Спасибо Миха, я попробую это. Да, все таблицы имеют одинаковый атрибут и имеют одинаковый тип геометрии. Еще раз спасибо ...
Райан Гарнетт
Я попытался, и я получаю ошибку, связанную с XY. Я знаю, что ставлю не то, что нужно, так как не уверен, что мне следует использовать там. Вот мой запрос и выходной ответ. Любая помощь будет отличной.
Райан Гарнетт
CREATE TABLE pbear_pp (идентификатор серийного первичного ключа, имя объекта varchar (40)); SELECT AddGeometryColumn ('pbear_pp', 'geom', '- 1', 'polygon', 'XY'); INSERT INTO pbear_pp (entityname, geom) ВЫБРАТЬ имя объекта, geom FROM nts250k.nts250k_043e_poly; INSERT INTO pbear_pp (entityname, geom) ВЫБРАТЬ имя объекта, geom FROM nts250k.nts250k_043f_poly; ETC ETC ...
Райан Гарнетт
ЗАМЕЧАНИЕ: CREATE TABLE создаст неявную последовательность "pbear_pp_id_seq" для последовательного столбца "pbear_pp.id" NOTICE: CREATE TABLE / PRIMARY KEY создаст неявный индекс "pbear_pp_pkey" для таблицы "pbear_pp" ERROR: неверный синтаксис ввода для целого числа: "XY"
Райан Гарнетт
1
используйте 2 вместо 'XY', поскольку этот аргумент определяет размеры.
lynxlynxlynx