postgis DBの既存のテーブル(新しいスキーマを適用)からテーブルを作成する方法は?


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

ただし、これを行うと、データベースが分離されます(正規化されません)。つまり、冗長性があるため、1つのテーブルの情報に更新がある場合、別のテーブルで更新することは困難です。さらに、サブリージョンだけで全世界に対してクエリを実行することはできません。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データベースの内部の仕組みをよく理解してくれました!ありがとうございました!
ニックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.