Bagaimana cara membuat tabel dari tabel yang ada (menerapkan skema baru) di DB postgis?


9

Saya punya tabel yang secara geospasial diaktifkan; yang mengandung batas dunia. Saya ingin memecahnya ke skema yang berbeda (global, eropa dll.). Pikiranku adalah menggunakan sesuatu yang terlihat seperti ini:

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

Apa yang benar untuk membuat tabel dari tabel yang ada dengan mempertimbangkan skema baru dan menjadikannya diaktifkan secara geospasial? Apakah saya harus membuat tabel baru terlebih dahulu menggunakan templat postgis default saya?

Jawaban:


21

Secara umum Anda dapat membuat tabel geospasial baru seperti ini:

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

Namun, dengan melakukan ini, Anda memisahkan basis data Anda (menghapus normalannya). Ini berarti ada redundansi, jadi jika ada pembaruan untuk setiap info dalam satu tabel, sulit untuk memperbarui di yang lain. Selain itu, Anda tidak akan dapat melakukan permintaan di seluruh dunia, hanya subkawasan. Anda bisa mempertimbangkan menggunakan VIEW untuk membuat tabel partisi virtual dari tabel utama:

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

Jawaban Anda benar-benar menjawab pertanyaan saya dan memberi saya pemahaman yang lebih baik dalam karya dalam database postgresql / postgis! Terima kasih!
nickves
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.