¿Cómo crear una tabla a partir de tablas existentes (aplicando nuevos esquemas) en postgis DB?

9

Tengo una tabla que está habilitada geoespacialmente; que contienen fronteras mundiales. Quiero dividirlo en diferentes esquemas (global, europa, etc.). Mi pensamiento es usar algo que se vea así:

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

¿Qué es lo correcto para crear tablas a partir de tablas existentes teniendo en cuenta nuevos esquemas y haciéndolos habilitados geoespacialmente? ¿Tengo que crear de antemano las nuevas tablas con mi plantilla de postgis predeterminada?

nickves
fuente

Respuestas:

21

En general, puede hacer una nueva tabla geoespacial como esta:

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

Sin embargo, al hacer esto, está segregando su base de datos (no normalizándola). Esto significa que tiene redundancia, por lo que si hay una actualización para cualquier información en una tabla, es difícil actualizarla en otra. Además, no podrá realizar consultas en todo el mundo, solo en subregiones. Podría considerar usar VIEWs para hacer tablas virtuales de particiones de la tabla principal:

-- 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);
Mike T
fuente
¡Su respuesta realmente respondió mi pregunta y me dio una mejor comprensión de los trabajos internos de las bases de datos postgresql / postgis! ¡Gracias!
nickves