Postgis DB'de mevcut tablolardan bir tablo nasıl oluşturulur (yeni şemalar uygulanır)?


9

Coğrafi olarak etkin bir tablo var; dünya sınırları içeren. Farklı şemalara (küresel, avrupa vb.) Bölmek istiyorum. Benim düşüncem kullanmak gibi bir şey kullanmaktır:

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

Yeni şemaları hesaba katarak ve onları coğrafi olarak etkin kılan mevcut tablolardan tablo oluşturmak için doğru olan nedir? Varsayılan postgis şablonumu kullanarak önceden yeni tablolar oluşturmam gerekiyor mu?

Yanıtlar:


21

Genellikle böyle bir jeo-uzamsal tablo oluşturabilirsiniz:

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

Ancak, bunu yaparak veritabanınızı ayırırsınız (normalleştirmeden). Bu, yedekliliğe sahip olduğu anlamına gelir, bu nedenle bir tabloda herhangi bir bilgi için güncelleme varsa, başka bir tabloda güncelleme yapmak zordur. Dahası, tüm dünyada sorgulamalar yapamazsınız, sadece alt bölgeler. Ana tablonun bölümlerinin sanal tablolarını oluşturmak için GÖRÜNÜMleri kullanmayı düşünebilirsiniz:

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

Cevabınız gerçekten sorumu yanıtladı ve postgresql / postgis veritabanlarının iç çalışmalarında bana daha iyi bir anlayış verdi! Teşekkür ederim!
nickves
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.