Về cơ bản, có ba cách nâng cấp PostgreSQL từ các phiên bản chính khác nhau (ví dụ: 9.1 lên 9.3).
Nâng cấp với pg_dump
Cách đầu tiên, và được khuyến nghị nếu có thể, là thực hiện kết xuất phiên bản cũ (9.1) bằng cách sử dụng nhị phân của phiên bản mới hơn (9.3) và khôi phục nó trên cụm mới được tạo từ phiên bản mới hơn.
Cách tiếp cận này, nói chung, là chậm hơn, nhưng cũng khả thi nhất. Một mẹo để làm cho nó nhanh hơn, là sử dụng đồng thời. Để kết xuất với các công việc song song, bạn có thể làm:
$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
Bạn sẽ phải làm điều đó cho từng cơ sở dữ liệu bạn có, điều chỉnh --jobs=4
giá trị thành bất kỳ giá trị nào (kiểm tra một số giá trị từ 2 đến số lõi và xem cái nào cho tốc độ tốt hơn). Ngoài ra, trong giai đoạn này, không ai được kết nối với cơ sở dữ liệu, bất kỳ sửa đổi nào cũng sẽ dẫn đến kết xuất bị hỏng (vì tùy chọn không an toàn --no-synchronized-snapshots
).
Sau đó, bạn có thể khôi phục bạn kết xuất vào trường hợp mới bằng cách sử dụng pg_restore
:
$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump
Sau đó, nên chạy ANALYZE
trên cơ sở dữ liệu của bạn:
$ vacuumdb --analyze-only mydatabase
(nếu bạn có đủ thời gian, chỉ chạy --analyze
đến VACUUM
cơ sở dữ liệu và cập nhật bản đồ hiển thị)
Nâng cấp với pg_upTHER
Một lựa chọn khác, là sử dụng contribpg_upgrade
. Sử dụng --link
phương thức này cung cấp một cách thực sự nhanh chóng để nâng cấp PostgreSQL.
Trước khi sử dụng, bạn phải tạo một bản sao lưu của toàn bộ thư mục dữ liệu, bởi vì trong --link
chế độ, nếu có sự cố, bạn có thể mất cả dữ liệu (mới và cũ). Ngoài ra, đọc toàn bộ tài liệu và đặc biệt là các ghi chú ở phía dưới (có một số hạn chế đối với pg_upTHER).
CẬP NHẬT: Vui lòng sử dụng --check
tùy chọn trước khi chạy lệnh dứt khoát. Ngoài ra, đối với các cơ sở dữ liệu lớn, nên chạy lệnh này trong phiên màn hình.
Nâng cấp bằng công cụ sao chép dựa trên kích hoạt
Một tùy chọn khác để nâng cấp phiên bản, là sử dụng công cụ sao chép dựa trên trình kích hoạt. Giống như Slony, Bucardo và Londiste.
Đây là tùy chọn yêu cầu ít thời gian chết nhất có thể, nhưng nó là lựa chọn khó nhất để làm việc.
Để làm điều đó, bạn cần xây dựng một chủ nô trong đó chủ là phiên bản hiện tại của bạn (9.1) và nô lệ là phiên bản mới (9.3). Sau đó, bạn đợi đồng bộ hóa đầu tiên (với hệ thống vẫn đang được sản xuất), sau đó bạn đóng mọi người kết nối với cơ sở dữ liệu (thời gian ngừng hoạt động bắt đầu tại đây), đợi nô lệ bắt kịp, quảng bá nó (nô lệ) để làm chủ và chuyển hướng tất cả khách hàng / ứng dụng sang phiên bản mới này. Và bạn đã hoàn thành.
Tài liệu về Slony cung cấp từng bước để nâng cấp PostgreSQL bằng Slony .
Chọn cái nào
Vâng, như mọi khi phụ thuộc, tiếp tục:
- Kết xuất + khôi phục là đáng tin cậy nhất, nhưng nói chung là chậm nhất (song song có thể cho kết quả khá tốt)
- Pg_upTHER là một trong những lựa chọn tốt nhất cho thời gian chết ít (nếu bạn có thể sử dụng, xem các giới hạn), thường chỉ mất vài phút, ngay cả đối với cơ sở dữ liệu lớn
- Bản sao kích hoạt, không nghi ngờ gì là cái cho thời gian chết ít nhất có thể (gần bằng 0), nhưng thực sự rất khó để đạt được và tôi chỉ khuyên dùng cho những người có kinh nghiệm (trên cả PostgreQuery và công cụ sao chép).
Tôi hy vọng tôi có thể giúp đỡ. Chúc may mắn.