Cập nhật: Quá trình này tương tự để nâng cấp từ 9,6 lên 10; chỉ cần sửa đổi các lệnh để phản ánh các phiên bản 9.6
và 10
, trong đó 9.6
là phiên bản cũ và 10
là phiên bản mới. Đảm bảo điều chỉnh thư mục "cũ" và "mới" tương ứng.
Tôi vừa nâng cấp PostgreSQL 9.5 lên 9.6 trên Ubuntu và nghĩ rằng tôi chia sẻ các phát hiện của mình, vì có một vài sắc thái hệ điều hành/gói cụ thể cần lưu ý.
(Tôi không muốn phải đổ và khôi phục dữ liệu bằng tay, vì vậy một số trong những câu trả lời khác ở đây là không khả thi.)
Tóm lại, quá trình này bao gồm cài đặt các phiên bản mới của PostgreSQL cùng với phiên bản cũ (ví dụ: 9.5 và 9.6), và sau đó chạy mã nhị phân pg_upgrade
, được giải thích trong (một số) chi tiết tại https://www.postgresql.org/docs/9.6/static/pgupgrade.html.
duy nhất "khéo léo" khía cạnh của pg_upgrade
là thất bại trong việc vượt qua các giá trị chính xác cho một cuộc tranh cãi, hoặc không được đăng nhập như là người dùng đúng hay cd
đến đúng vị trí trước khi thực hiện một lệnh, có thể dẫn đến khó hiểu thông báo lỗi.
Trên Ubuntu (và có thể là Debian), miễn là bạn đang sử dụng repo "chính thức", deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
và miễn là bạn không thay đổi đường dẫn hệ thống tệp mặc định hoặc tùy chọn thời gian chạy.
Cài đặt phiên bản mới (lưu ý rằng chúng tôi xác định 9.6
, rõ ràng):
sudo apt install postgresql-9.6
Sau khi cài đặt thành công, cả hai phiên bản sẽ được chạy side-by-side, nhưng trên các cổng khác nhau.Sản lượng cài đặt nhắc này, ở phía dưới, nhưng nó dễ dàng bỏ qua:
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5433
Dừng cả hai trường hợp máy chủ (điều này sẽ ngăn chặn cả hai cùng một lúc):
sudo systemctl stop postgresql
Chuyển sang PostgreSQL chuyên dụng hệ thống sử dụng:
su postgres
Move vào thư mục chính của mình (thất bại để làm điều này sẽ gây ra lỗi):
cd ~
pg_upgrade
đòi hỏi đầu vào sau (pg_upgrade --help
cho chúng ta biết điều này):
When you run pg_upgrade, you must provide the following information:
the data directory for the old cluster (-d DATADIR)
the data directory for the new cluster (-D DATADIR)
the "bin" directory for the old version (-b BINDIR)
the "bin" directory for the new version (-B BINDIR)
Những đầu vào có thể được xác định với "tên dài", để làm cho họ dễ dàng hơn để hình dung:
-b, --old-bindir=BINDIR old cluster executable directory
-B, --new-bindir=BINDIR new cluster executable directory
-d, --old-datadir=DATADIR old cluster data directory
-D, --new-datadir=DATADIR new cluster data directory
Chúng tôi cũng phải vượt qua khóa chuyển đổi --new-options
, vì không thực hiện được như sau:
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?
Điều này xảy ra do tùy chọn cấu hình mặc định được áp dụng khi không có công tắc này, kết quả là các tùy chọn kết nối không chính xác đang được sử dụng, do đó lỗi socket.
Thực hiện lệnh pg_upgrade
từ mới phiên bản PostgreSQL:
/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf
Đăng xuất khỏi tài khoản người dùng hệ thống chuyên dụng:
exit
Việc nâng cấp đã hoàn tất, nhưng, mới Ví dụ sẽ liên kết với cổng 5433
(mặc định chuẩn là 5432
), vì vậy hãy ghi nhớ điều này nếu cố gắng kiểm tra trường hợp mới trước khi "cắt giảm" cho nó.
Khởi động máy chủ như bình thường (một lần nữa, điều này sẽ bắt đầu cả hai trường hợp cũ và mới):
systemctl start postgresql
Nếu bạn muốn làm cho phiên bản mới mặc định, bạn sẽ cần phải chỉnh sửa file cấu hình có hiệu quả , ví dụ, /etc/postgresql/9.6/main/postgresql.conf
, và đảm bảo rằng các cổng được định nghĩa như vậy:
port = 5432
Nếu bạn làm điều này, hoặc thay đổi số cổng phiên bản cũ để 5433
cùng một lúc (trước khi bắt đầu các dịch vụ), hay đơn giản loại bỏ các phiên bản cũ (điều này sẽ không loại bỏ nội dung cơ sở dữ liệu thực tế của bạn, bạn sẽ cần phải sử dụng apt --purge remove postgresql-9.5
cho điều đó xảy ra):
apt remove postgresql-9.5
lệnh trên sẽ ngừng tất cả các trường, vì vậy bạn sẽ cần phải khởi động mới ví dụ lần cuối cùng với:
systemctl start postgresql
Là một điểm cuối cùng của lưu ý, đừng quên xem xét pg_upgrade
's lời khuyên tốt:
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
./delete_old_cluster.sh
Thực hiện sao lưu trong mọi trường hợp. –