Tôi đang thử nghiệm bản nâng cấp PostgreSQL 8.2.1 lên 9.2 trên máy ảo chạy bản phân phối Linux tùy chỉnh. Quy trình nâng cấp như sau:
- Bắt đầu
pg
dịch vụ - Hút tất cả các DB (không chắc chắn nếu điều này là cần thiết)
- Sao lưu với
pg_dumpall
- Dừng
pg
dịch vụ - Di chuyển khỏi thư mục nơi dữ liệu được lưu trữ (
/var/pg
; đó là một thiết lập máy chủ đơn giản) - Cài đặt PostgreSQL 9.2
initdb
- Khởi động máy chủ
- Khôi phục dữ liệu bị đổ
reindexdb
tất cả các DB- Tái tạo
referential_constraints
góc nhìn - Hút tất cả các DB (yêu cầu AFAIK sau khi nâng cấp này)
Quy trình này hoạt động tốt trên một máy chủ, sao lưu và khôi phục mà không gặp trở ngại. Trên một máy khác có cơ sở dữ liệu khác điểm 1 đến 7 hoạt động tốt, nhưng máy chủ sẽ không khởi động trừ khi tôi thêm sleep 1
sau đó initdb
và thậm chí sau đó dữ liệu bị hủy không thể được khôi phục vì "hệ thống cơ sở dữ liệu đang khởi động". Các cách tiêu chuẩn để đối phó với điều này là gì, ngoại trừ những vụ hack khủng khiếp này:
sleep
ing cho một số lượng lớn thời gian trước khi hoạt động,- lặp cho đến khi nó hoạt động hoặc cho đến khi đạt được thời gian chờ hào phóng, hoặc
- lặp cho đến khi nó chấp nhận một truy vấn tầm thường hoặc hết thời gian chờ.
Chỉnh sửa: " Giải pháp " không hoạt động sau tất cả. Cần gì để đảm bảo cơ sở dữ liệu đã sẵn sàng để chạy khôi phục?
initdb
được chạy đồng bộ, vì vậy khi máy chủ được khởi động initdb
đã kết thúc thành công.
initdb
trạng thái thoát? Tôi cho rằng khi nó hoàn thành công việc.