วิธีสร้างตารางจากตารางที่มีอยู่ (ใช้ schema ใหม่) ใน postgis DB


9

ฉันมีตารางที่เปิดใช้งานทางภูมิศาสตร์ ที่มีพรมแดนโลก ฉันต้องการที่จะทำลายมันลงไปใน schemas ที่แตกต่างกัน (ทั่วโลกยุโรป ฯลฯ .. ) ความคิดของฉันคือการใช้สิ่งที่มีลักษณะเช่นนี้:

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

อย่างไรก็ตามโดยการทำเช่นนี้คุณกำลังแยกฐานข้อมูลของคุณ (ยกเลิกการทำให้ปกติ) ซึ่งหมายความว่ามีความซ้ำซ้อนดังนั้นหากมีการอัปเดตข้อมูลใด ๆ ในตารางหนึ่งจะเป็นการยากที่จะอัพเดทในอีก นอกจากนี้คุณจะไม่สามารถทำการค้นหาในโลกทั้งใบได้ คุณสามารถพิจารณาใช้ VIEWs เพื่อสร้างตารางเสมือนของพาร์ติชันของตารางหลัก:

-- 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! ขอบคุณ!
nickves
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.