Sử dụng lược đồ khác ngoài công khai trong PostGIS?


20

Tôi hiện đang thiết lập một bản cài đặt mới của PostGIS 2.0.2 và PostgreSQL 9.1.6 trên Ubuntu. Gần đây tôi đã bắt gặp một số thông tin chỉ ra rằng sử dụng lược đồ công cộng để lưu trữ tất cả dữ liệu không phải là một ý tưởng hay.

Vì lý do này, tôi đã thiết lập một lược đồ gọi là dữ liệu và biến mình thành chủ sở hữu, nhưng đó có phải là một ý tưởng tốt không?

Mối quan tâm của tôi là:

  1. Bên cạnh việc thiết lập chủ sở hữu, tôi có thể cần chú ý đến những thứ trên tab Đặc quyền khi tạo lược đồ mới này (thông qua pgAdmin III);
  2. Tôi có thể không nhận được lợi ích tương tự bằng cách lưu trữ dữ liệu của mình trong lược đồ công cộng và bỏ tất cả dữ liệu vào một lược đồ riêng trước khi thực hiện sao lưu / khôi phục (điều này sẽ tiết kiệm một vài lần nhấn phím khi sử dụng ogr2ogr); và
  3. Tôi có thể gặp rắc rối khi không có các bảng và khung nhìn PostGIS mặc định trong lược đồ dữ liệu mới của mình (chúng nằm trong lược đồ công khai trong cùng một cơ sở dữ liệu).

1
Kiểm tra câu trả lời mới tại đây gis.stackexchange.com/a/270522/6052
Evan Carroll

3
Vâng, nó vẫn còn hiệu lực. Điểm chính là nó sạch hơn, khi bạn tách dữ liệu người dùng khỏi dữ liệu và chức năng của hệ thống.
John Powell

Tôi không phải là người dùng PostGIS nhưng tôi nghi ngờ rằng câu trả lời tốt nhất cho câu hỏi của bạn bây giờ có thể là gis.stackexchange.com/a/270522/115 vì vậy nếu bạn đồng ý tôi sẽ khuyến khích bạn chuyển dấu kiểm Chấp nhận của bạn sang nó.
PolyGeo

1
Câu hỏi này nên là hai câu hỏi. Câu trả lời được chấp nhận không trả lời câu hỏi như bằng văn bản. Câu hỏi này nên được mở lại vì nó KHÔNG phải là một bản sao của câu hỏi này, nó đang hỏi liệu các đối tượng PostGIS có thể tự làm việc với các đối tượng không có trong publiclược đồ hay không. Câu hỏi khác là về việc cài đặt các đối tượng mở rộng PostGIS vào một lược đồ khác public. Đây là hai điều khác nhau!
Kenny Evitt

Câu trả lời:


5

Điều này hiện được giải quyết trên trang web chính thức trong một trang có tiêu đề Di chuyển phần mở rộng PostGIS sang một lược đồ khác . Phương pháp đúng là cài đặt phần mở rộng vào public. Đây là lựa chọn duy nhất. Phần mở rộng không còn hỗ trợ di dời. Điều tiếp theo là chạy các lệnh sau, (được sao chép từ trang web),

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
Điều này KHÔNG trả lời câu hỏi như bằng văn bản; nó KHÔNG nên là câu trả lời được chấp nhận Rõ ràng là đang hỏi về việc "không có các bảng và khung nhìn PostGIS mặc định trong datalược đồ mới của tôi (chúng nằm trong publiclược đồ trong cùng một cơ sở dữ liệu)". Câu trả lời này rất hữu ích và đó là những gì tôi đang tìm kiếm, nhưng nó không liên quan trực tiếp đến câu hỏi.
Kenny Evitt

20

Khi bạn kích hoạt không gian cơ sở dữ liệu PostGIS, các hàm liên quan, bảng SRS và các khung nhìn được đặt trong lược đồ công khai, như bạn nêu. Điều đó không có nghĩa là tất cả hoặc bất kỳ bảng không gian riêng nào của bạn cần phải nằm trong cùng một lược đồ công khai. PostGIS vẫn sẽ hoạt động trên tất cả các dữ liệu không gian trong các lược đồ "mới".

Trong thực tế, tôi thường đặt các bảng dành riêng cho ứng dụng của mình trong một lược đồ riêng. Bằng cách đó, nếu bạn cần nâng cấp phiên bản chính lên PostGIS, bạn có thể giữ các bản sao lưu bảng dành riêng cho ứng dụng của mình và khôi phục như một quy trình riêng biệt với quy trình thay thế các công cụ không gian.

Vì vậy, tôi nghĩ rằng bạn đang làm tốt. Cuối cùng, trong trường hợp bạn chưa làm điều đó, bạn nên thêm lược đồ mới vào đường dẫn tìm kiếm:

ALTER DATABASE my_db SET search_path = gc, public;


Cảm ơn Martin. Có nghĩa là tôi có thể sử dụng các hàm không gian trên các bảng trong một lược đồ tùy chỉnh khác ngoài "công khai"?
alextc

Làm thế nào để bạn thêm dữ liệu vào một lược đồ khác, tức là. không public? Thêm dữ liệu với ví dụ. shp2psqlđể test.tablevẫn đặt dữ liệu vào public?
knutole

@knutole. Như tôi đã đề cập, tôi đã sử dụng ArcCatalog để nhập / các lớp tính năng mới. Tôi không chắc chắn nếu bạn có thể sử dụng shp2psql để thêm dữ liệu vào một lược đồ tùy chỉnh khác ngoài công khai.
alextc

1
Đây phải là câu trả lời được chấp nhận.
Kenny Evitt

12
  1. Một trong những chiến lược tổ chức khả thi mà bạn có thể xây dựng với các lược đồ là cho phép người dùng chạy tràn lan trong một lược đồ, nhưng không thể làm hỏng mọi thứ trong một lược đồ khác. Vì vậy, nếu bạn muốn sử dụng các lược đồ theo cách này, điều đó có thể được thực hiện trong tab đặc quyền của pgAdmin. Nhưng bạn không cần phải làm điều đó, vì vậy nếu bạn chỉ muốn duy trì các đặc quyền giống nhau trên nhiều lược đồ, điều đó tốt.

  2. Dựa trên các bài viết bạn liên kết đến, vấn đề với việc giữ mọi thứ ở chế độ công khai là khi bạn kết xuất dữ liệu, bạn có thể nhận được các bảng hệ thống và các mối quan hệ trộn lẫn với dữ liệu của bạn. Nếu bạn di chuyển tất cả dữ liệu của mình sang một lược đồ mới, bạn không phải lo lắng về điều đó nữa.

  3. Không có rắc rối nào cả. (Để chứng minh, lưu ý rằng bạn không phải chỉ định public.spatial_Vf_sys khi bạn muốn tìm kiếm bảng SRS.)


6

Một mẹo bổ sung (có thể bạn đã bắt gặp điều này). Có lẽ bạn sẽ muốn thêm lược đồ "dữ liệu" vào search_path mặc định của người dùng. Cái gì đó như:

ALTER USER <your_user_name> SET search_path=public,data,$USER; 

Về điểm 2 của bạn, đôi khi bạn cần khôi phục khi bạn không còn quyền truy cập vào DB gốc. (Đó là một trong những lý do để sao lưu ...) vì vậy bạn có thể không có cơ hội di chuyển dữ liệu của mình sang một lược đồ riêng khi bạn thực sự cần nó.


1

Chúng tôi sử dụng lược đồ công khai để phân tích tạm thời / kết quả bảng dev, sau đó đi vào các lược đồ (thư mục?) Có tổ chức hơn để sử dụng vĩnh viễn.

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.