Làm cách nào tôi có thể chuyển dữ liệu từ cơ sở dữ liệu PostGIS sang cơ sở dữ liệu khác?


8

Tôi có khá nhiều dữ liệu GIS trong Cơ sở dữ liệu PostGIS cũ (phiên bản "1.1.6") và tôi cần chuyển nó sang Cơ sở dữ liệu PostGIS khác ("POSTGIS =" 1.5.3 ").

Tôi đã thử tạo một bản sao lưu và khôi phục nó trên Cơ sở dữ liệu mới, nhưng nó đã gây ra hàng trăm lỗi.

Cách chính xác để chuyển dữ liệu là gì?


Bạn đã thử nghiệm nếu nó hoạt động mặc dù các lỗi?
RK

@RK Có nó hoạt động; Tôi cảm thấy rằng có thể có một số tham nhũng dữ liệu tinh vi, mà tôi có thể không nhận thức được. Tôi cũng đã tự hỏi nếu có một cách tốt hơn để chuyển dữ liệu mà không có bất kỳ lỗi nào.
Devdatta Tengshe

Câu trả lời:


6

Theo Paul Ramsey :

Đầu tiên, để tăng phiên bản vá (ví dụ XYZ -> XY (Z + 1)) trong PostgreQuery và PostGIS, bạn không cần phải làm gì khác ngoài cài đặt phần mềm mới. Dữ liệu có thể được giữ nguyên và mọi thứ sẽ hoạt động.

Đối với các phiên bản nhỏ tăng trong PostgreSQL (ví dụ XYZ -> X. (Y + 1) .Z), bạn cần kết xuất và khôi phục. Để tăng phiên bản nhỏ trong PostGIS, bạn cần thực hiện "nâng cấp mềm", nghĩa là để nguyên dữ liệu, nhưng chạy các tập lệnh nâng cấp (ví dụ: postgis_upTHER_14_to_15.sql) sau khi bạn cài đặt bản cập nhật phần mềm.

Cuối cùng, đối với phiên bản chính tăng trong PostgreSQL và PostGIS (ví dụ XYZ -> (X + 1) .YZ), bạn cần kết xuất và khôi phục.

Bạn đã lưu trữ dữ liệu trong lược đồ công cộng?

Điều này đưa tôi đến điểm thực tế mà tôi muốn thực hiện: bạn có thể đảm bảo dễ dàng nhất trong việc thực hiện kết xuất và khôi phục dữ liệu PostGIS nếu bạn đảm bảo rằng bạn không lưu trữ dữ liệu trong lược đồ "công khai".

Không phải tất cả bị mất mặc dù nếu bạn lưu trữ dữ liệu trong lược đồ công cộng

"Nhưng Paul," bạn nói, "Tôi đã có một bãi chứa cơ sở dữ liệu đầy đủ, điều đó có nghĩa là tôi là SOL?" Không, nhưng bạn sẽ cần một dạ dày mạnh mẽ. Đầu tiên, hãy thiết lập PostgreSQL mới của bạn. Tạo một cơ sở dữ liệu trống, tải PostGIS vào nó. Bây giờ, tải tập tin sao lưu của bạn vào cơ sở dữ liệu đó. Bạn sẽ thấy rất nhiều lỗi. Tuy nhiên, những lỗi này sẽ do hàm PostGIS cũ và các định nghĩa loại từ tệp kết xuất của bạn xung đột với các định nghĩa loại hiện có trong cơ sở dữ liệu của bạn. Và vì bạn muốn định nghĩa mới, không phải định nghĩa cũ, điều đó ổn. Tải của bạn, mặc dù tất cả các tiếng ồn và lỗi, nên thực sự hoạt động. Khi đã xong, bạn có thể di chuyển dữ liệu của mình vào một lược đồ riêng biệt đẹp mắt để lần sau bạn có thể thực hiện khôi phục sạch, không có lỗi.

Bạn đã thử nghiệm nếu nó hoạt động mặc dù các lỗi?

Trang PostGIS cũng có một phần về nâng cấp PostGIS .


Vì vậy, về cơ bản các lược đồ công cộng là dành cho bảng tạm thời?
biệt danh

3
Không. Chỉ là công khai "là nơi các hàm hệ thống và bảng hệ thống của PostGIS được cài đặt, vì vậy nếu bạn kết xuất lược đồ đó, bạn sẽ nhận được tất cả các định nghĩa đó trong kết xuất của mình." Sẽ không sao nếu bạn chuyển sang cơ sở dữ liệu PostGIS khác có cùng phiên bản với bản gốc nhưng có thể là một vấn đề khi cơ sở dữ liệu định nghĩa là một phiên bản khác. Phiên bản mới có thể có các định nghĩa hàm khác nhau có thể xung đột với các định nghĩa trong lược đồ công cộng.
RK

2

Kiểm tra các bảng thông thường và "bảng có hình học", sau đó sử dụng (tại thiết bị đầu cuối shell / UNIX)

  • pg_dumpđể xuất các bảng thông thường (nhập với psql)
  • pgsql2shpđể xuất các bảng địa lý và shp2pgsqlđể nhập.

Cái cuối cùng (pssql2shp) là dành cho "lỗi" của pg_dump khi xuất các phiên bản "cũ sang dữ liệu PostGIS mới". Tất nhiên, nếu không có lỗi, bạn chỉ cần pg_dump.

Trước tiên, hãy kiểm tra giới thiệu @RK, psql -f postgis_upgrade_1X_to_15.sql -d your_spatial_database... Nói chung (bot không phải lúc nào cũng ổn) ... pssql2shp là tùy chọn LAST.


1

Tôi đồng ý với các câu trả lời khác và đã sử dụng phương pháp pg_dump. Một lợi thế nữa là bạn có thể nén kết xuất vào một zip hoặc tar chẳng hạn và di chuyển nó sang một máy chủ khác nếu bạn cần.


pg_dump xuất dữ liệu PostGIS với một số "lỗi" ... pssql2shp xuất tốt hơn hình học, khi xuất các phiên bản postGIS cũ sang các phiên bản mới.
Peter Krauss
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.