Як створити таблицю з існуючих таблиць (застосувавши нові схеми) у БД postgis?


9

У мене є таблиця, яка вмикається в геопатію; які містять світові кордони. Я хочу розбити його на різні схеми (глобальні, європейські тощо). Моя думка полягає в тому, щоб використовувати щось таке, що виглядає так:

CREATE TABLE europe.borders
  AS (SELECT *
         FROM wo_borders
         WHERE admin_lvl2='eu' ); //just an example!

Що правильного для створення таблиць із існуючих таблиць, враховуючи нові схеми та роблячи їх геосимпатичними? Чи потрібно заздалегідь створювати нові таблиці за допомогою мого шаблону Postgis за замовчуванням?

Відповіді:


21

Як правило, ви можете зробити нову геопросторову таблицю на зразок цієї:

SELECT *
INTO europe.borders
FROM wo_borders
WHERE admin_lvl2 = 'eu';

-- Define a primary key
ALTER TABLE europe.borders ADD PRIMARY KEY (gid);

-- Spatially enable it
SELECT Populate_Geometry_Columns('europe.borders'::regclass);

Однак цим ви відокремлюєте свою базу даних (ненормативуючи її). Це означає, що він має надмірність, тому якщо в одній таблиці є оновлення будь-якої інформації, її важко оновити в іншій. Крім того, ви не зможете виконувати запити в усьому світі, лише на субрегіонах. Ви можете розглянути можливість використання VIEW для створення віртуальних таблиць розділів основної таблиці:

-- Make an index on your column used to query the view
CREATE INDEX wo_borders_admin_lvl2_idx ON wo_borders USING btree (admin_lvl2);

-- Now the view
CREATE OR REPLACE VIEW europe.borders_view AS
 SELECT *
 FROM wo_borders
 WHERE admin_lvl2 = 'eu';

-- Spatially enable it
SELECT Populate_Geometry_Columns('europe.borders_view'::regclass);

Ваша відповідь справді відповіла на моє запитання і дала мені краще розуміння у внутрішніх роботах баз даних postgresql / postgis! Дякую!
ники
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.