Come creare una tabella da tabelle esistenti (applicando nuovi schemi) in Postgis DB?


9

Ho una tabella abilitata geospazialmente; che contengono i confini del mondo. Voglio scomporlo in diversi schemi (globale, europa ecc.). Il mio pensiero è di usare usare qualcosa che assomiglia a questo:

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

Qual è la corretta creazione di tabelle da tabelle esistenti tenendo conto di nuovi schemi e rendendoli geospazialmente abilitati? Devo creare in anticipo le nuove tabelle usando il mio modello Postgis predefinito?

Risposte:


21

Generalmente puoi creare una nuova tabella geospaziale come questa:

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);

Tuttavia, facendo questo, stai separando il tuo database (non normalizzandolo). Ciò significa che ha ridondanza, quindi se c'è un aggiornamento per qualsiasi informazione in una tabella, è difficile aggiornarla in un'altra. Inoltre, non saresti in grado di eseguire query in tutto il mondo, solo nelle sottoregioni. Puoi prendere in considerazione l'utilizzo di VIEWs per creare tabelle virtuali di partizioni della tabella principale:

-- 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);

La tua risposta ha davvero risposto alla mia domanda e mi ha dato una migliore comprensione delle opere interne dei database postgresql / postgis! Grazie!
Nickves
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.