Saya sedang menguji peningkatan PostgreSQL 8.2.1 ke 9.2 pada mesin virtual yang menjalankan distro Linux khusus. Prosedur peningkatan adalah sebagai berikut:
- Mulai
pg
layanan - Vakum semua DB (tidak yakin apakah ini diperlukan)
- Cadangkan dengan
pg_dumpall
- Hentikan
pg
layanan - Pindahkan direktori tempat data disimpan (
/var/pg
; ini adalah pengaturan server tunggal yang sederhana) - Instal PostgreSQL 9.2
initdb
- Mulai server
- Kembalikan data yang dibuang
reindexdb
semua DB- Buat kembali
referential_constraints
pemandangan - Kosongkan semua DB (AFAIK diperlukan setelah peningkatan ini)
Prosedur ini berfungsi dengan baik pada satu host, mencadangkan dan memulihkan tanpa hambatan. Di komputer lain dengan titik basis data yang berbeda 1 hingga 7 berfungsi dengan baik, tetapi server tidak akan memulai kecuali saya menambahkan sleep 1
setelah initdb
, dan bahkan kemudian data yang dibuang tidak dapat dipulihkan karena "sistem basis data mulai". Apa cara standar untuk mengatasi ini, kecuali untuk peretasan yang mengerikan ini:
sleep
untuk sejumlah waktu sebelum operasi,- perulangan sampai berfungsi atau sampai batas waktu yang baik tercapai, atau
- pengulangan sampai menerima kueri sepele atau batas waktu tercapai.
Sunting: " Solusi " tidak berhasil sama sekali. Apa yang diperlukan untuk memastikan database siap menjalankan pemulihan?
initdb
dijalankan secara serempak, sehingga ketika server dimulai initdb
sudah selesai dengan sukses.
initdb
status keluar? Saya kira ketika itu mengatur pekerjaan dilakukan.