Wie erstelle ich eine Tabelle aus vorhandenen Tabellen (Anwenden neuer Schemas) in der Postgis-Datenbank?

9

Ich habe eine Tabelle, die räumlich aktiviert ist. die Weltgrenzen enthalten. Ich möchte es in verschiedene Schemata aufteilen (global, Europa usw.). Mein Gedanke ist, etwas zu verwenden, das so aussieht:

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

Was ist richtig, um Tabellen aus vorhandenen Tabellen unter Berücksichtigung neuer Schemas zu erstellen und diese räumlich zu aktivieren? Muss ich die neuen Tabellen vorher mit meiner Standard-Postgis-Vorlage erstellen?

Nickves
quelle

Antworten:

21

Im Allgemeinen können Sie eine neue Geodatentabelle wie folgt erstellen:

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

Auf diese Weise trennen Sie jedoch Ihre Datenbank (und normalisieren sie nicht). Dies bedeutet, dass es redundant ist. Wenn also in einer Tabelle ein Update für Informationen vorhanden ist, ist es schwierig, in einer anderen Tabelle zu aktualisieren. Darüber hinaus könnten Sie keine Abfragen für die ganze Welt ausführen, sondern nur für Unterregionen. Sie können VIEWs verwenden, um virtuelle Tabellen von Partitionen der Haupttabelle zu erstellen:

-- 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.
quelle
Ihre Antwort hat meine Frage wirklich beantwortet und mir ein besseres Verständnis für die inneren Werke von Postgresql / Postgis-Datenbanken gegeben! Vielen Dank!
Nickves