Pindahkan PostgreSQL dari Zeabur ke Zenavo: pulihkan backup dan periksa data
Unggah dan pulihkan backup PostgreSQL dari Zeabur langsung di Zenavo, pahami penanganan versi utama, peran, serta dump klaster pg_dumpall, lalu verifikasi tabel sebelum mengalihkan trafik.
Artikel ini juga tersedia dalam English, 简体中文, 繁體中文, 日本語, dan Español.
Saat pindah dari Zeabur, layanan aplikasi bisa langsung dibuat ulang lewat impor template, sedangkan isi database dipindahkan melalui file backup.
Kabar baiknya: Zenavo mendukung langsung paket backup PostgreSQL yang diunduh dari Zeabur — tanpa perlu diekstrak di komputer lokal atau mengedit SQL secara manual. Panduan ini membahas cara memulihkan backup PostgreSQL Zeabur ke Zenavo, memeriksa kelengkapan data, dan mengalihkan aplikasi. Untuk alur pemindahan proyek secara menyeluruh, baca bersama panduan lengkap migrasi dari Zeabur.
1. Unduh backup dari Zeabur
Unduh backup dari layanan PostgreSQL Anda di Zeabur, sambil mencatat dua hal:
- Versi utama PostgreSQL (misalnya 15, 16, atau 17);
- Nama database yang benar-benar dipakai oleh aplikasi.
File yang diunduh dari Zeabur biasanya berupa arsip .zip (kadang namanya berakhiran .sql.gz, tetapi pembungkus luarnya sebenarnya ZIP) yang berisi SQL klaster hasil pg_dumpall. Biarkan file unduhan apa adanya — Zenavo mendukung unggahan langsung paket .zip dari Zeabur maupun file .sql dan .sql.gz biasa.
2. Buat database kosong dengan versi yang sama di Zenavo
Di proyek tujuan pada Zenavo, klik Tambah Layanan → Database → PostgreSQL, pilih versi utama yang sama seperti di Zeabur, lalu deploy.
Perhatikan tiga hal berikut:
- Samakan versi utama terlebih dahulu: Zenavo menolak pemulihan backup klaster dari versi yang lebih tinggi (misalnya PG 18) ke versi yang lebih rendah (misalnya PG 17). Pindahkan dulu pada versi yang sama; jika perlu upgrade, lakukan secara terpisah setelahnya.
- Pastikan database tujuan masih kosong: jangan menjalankan layanan aplikasi yang otomatis membuat tabel sebelum backup dipulihkan. Jika aplikasi sudah terlanjur membuat tabel, pemulihan backup klaster akan gagal karena database tujuan tidak kosong.
- Periksa ekstensi: jika database Anda memakai ekstensi seperti PostGIS atau
pgvector, pastikan image tujuan menyertakan ekstensi tersebut.
3. Unggah backup dan pulihkan
Buka tab Backup & Pemulihan (Backup & Restore) pada layanan PostgreSQL yang baru dibuat, klik unggah, pilih file backup yang diunduh dari Zeabur pada langkah 1, lalu jalankan pemulihan.
Karena backup Zeabur merupakan ekspor klaster pg_dumpall, Zenavo otomatis melakukan penyesuaian berikut saat memulihkan (lihat Mengunggah backup):
- Memulihkan isi database aplikasi di dalamnya ke database layanan saat ini;
- Membuat peran (role) aplikasi yang dipakai di dalam backup, lengkap dengan kata sandi peran dan kebijakan keamanan tingkat baris (RLS);
- Demi keamanan, menurunkan hak superuser
rootlama dari Zeabur menjadi peran tanpa hak superuser dan tidak bisa login langsung, sambil tetap mempertahankan kepemilikan tabel dan objeknya; - Melewati database sistem
template1danpostgressecara otomatis.
Jika satu backup klaster berisi lebih dari satu database aplikasi non-sistem, pemulihan akan meminta Anda memisahkannya lebih dulu; hampir semua proyek Zeabur hanya memiliki satu database aplikasi sehingga bisa langsung diunggah.
Jika proses pemulihan gagal di tengah jalan (misalnya karena ekstensi belum ada), setelah masalahnya diperbaiki sebaiknya hapus layanan PostgreSQL yang baru terisi sebagian itu dan buat layanan PostgreSQL baru yang bersih sebelum mencoba lagi.
4. Periksa struktur tabel dan jumlah baris
Setelah pemulihan selesai, buka Tampilan Database (Database View) pada layanan PostgreSQL untuk menjalankan kueri SQL read-only langsung dari browser.
Pertama, pastikan semua tabel aplikasi sudah lengkap:
SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema NOT IN ('pg_catalog', 'information_schema')
ORDER BY table_schema, table_name;
Lalu pilih beberapa tabel inti (misalnya tabel pengguna atau pesanan), dan bandingkan jumlah baris pasti serta waktu data terbaru dengan yang ada di Zeabur:
SELECT count(*) AS row_count, max(created_at) AS latest_created_at
FROM public.orders;
(Gunakan count(*), bukan angka perkiraan dari tampilan statistik sistem, agar jumlahnya akurat.)
5. Hubungkan aplikasi dan alihkan trafik
Di layanan aplikasi pada proyek yang sama, arahkan variabel koneksi database ke layanan PostgreSQL yang baru (saat layanan database bernama postgresql):
DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}
Jangan lagi menulis akun root lama dari Zeabur secara manual; gunakan variabel koneksi yang disediakan oleh database baru di Zenavo (mengingat insiden keamanan Zeabur sebelumnya, beralih ke kata sandi baru yang dibuat otomatis juga jauh lebih aman).
Jika Anda ingin tidak ada data yang hilang selama proses perpindahan, lakukan pengalihan resmi dengan urutan ini:
- Lakukan uji coba pemulihan lebih dulu di Zenavo memakai backup saat ini, lalu pastikan aplikasi bisa login, membaca, dan menambah data dengan normal;
- Pilih jam sepi, lalu hentikan sementara aplikasi di Zeabur (termasuk cron job atau pekerja antrean agar tidak ada data baru yang masuk ke database lama);
- Buat satu backup terakhir di Zeabur, lalu unggah dan pulihkan ke layanan PostgreSQL bersih di Zenavo;
- Jalankan aplikasi di Zenavo dan arahkan DNS domain Anda ke server baru.
Pertanyaan umum
Saat memulihkan muncul error bahwa database tujuan tidak kosong (database is not empty)?
Itu berarti layanan aplikasi Anda sudah terhubung ke database sebelum proses pemulihan dan otomatis membuat tabel (misalnya migrasi otomatis Prisma atau TypeORM). Hentikan aplikasi terlebih dahulu, hapus dan buat ulang layanan PostgreSQL baru, pulihkan backup lebih dulu, baru jalankan aplikasi.
Pemulihan berhasil, tetapi aplikasi menampilkan error permission denied atau gagal login?
Superuser root lama di dalam backup Zeabur diatur agar tidak bisa login. Ubah DATABASE_URL aplikasi Anda agar mereferensikan ${POSTGRESQL_CONNECTION_STRING} dari layanan database Zenavo (yang memakai akun postgres bawaan dan kata sandi baru).
File yang diunduh dari Zeabur berekstensi .sql.gz, tetapi tidak bisa dibuka atau diekstrak?
Ini karena penamaan file saat ekspor di Zeabur — file tersebut sebenarnya adalah arsip .zip. Tidak perlu mengganti nama atau mengekstraknya sendiri; unggah langsung apa adanya ke Backup & Pemulihan di Zenavo dan formatnya akan dikenali secara otomatis.
Setelah database selesai dipulihkan dan diperiksa, jangan lupa mengaktifkan backup otomatis berkala di Backup & Pemulihan Zenavo. Untuk langkah perpindahan proyek selengkapnya, lihat panduan migrasi dari Zeabur.
Inilah yang dibaca agen coding, di https://zenavo.app/id-ID/blog/migrate-zeabur-postgresql.md.
Markdown tidak bisa dimuat. Buka langsung: https://zenavo.app/id-ID/blog/migrate-zeabur-postgresql.md