Làm cách nào để tạo một bảng từ các bảng hiện có (áp dụng các lược đồ mới) trong postgis DB?


9

Tôi có một bảng được kích hoạt không gian địa lý; có chứa biên giới thế giới. Tôi muốn chia nó thành các lược đồ khác nhau (toàn cầu, châu Âu, v.v.). Suy nghĩ của tôi là sử dụng một cái gì đó trông như thế này:

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

Điều gì là chính xác để tạo một bảng từ các bảng hiện có có tính đến các lược đồ mới và làm cho chúng được kích hoạt theo không gian địa lý? Tôi có phải tạo trước các bảng mới bằng mẫu postgis mặc định của mình không?

Câu trả lời:


21

Nói chung, bạn có thể tạo một bảng không gian địa lý mới như thế này:

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

Tuy nhiên, bằng cách này, bạn đang tách biệt cơ sở dữ liệu của mình (không chuẩn hóa nó). Điều này có nghĩa là nó có dự phòng, vì vậy nếu có một bản cập nhật cho bất kỳ thông tin nào trong một bảng, thì rất khó để cập nhật trong bảng khác. Hơn nữa, bạn sẽ không thể thực hiện các truy vấn trên toàn thế giới, chỉ các tiểu vùng. Bạn có thể xem xét sử dụng VIEW để tạo các bảng phân vùng ảo của bảng chính:

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

Câu trả lời của bạn thực sự đã trả lời câu hỏi của tôi và cho tôi hiểu rõ hơn về các hoạt động bên trong của cơ sở dữ liệu postgresql / postgis! Cảm ơn bạn!
biệt danh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.