Menghapus semua data dalam basis data Postgres
Saya telah membuat dump db baru dari server produksi dengan flag --data-only
dan --column-inserts
, jadi saya hanya memiliki sekumpulan pernyataan sisipan untuk menyisipkan data saat melakukan restore pada server staging.
pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
Bagaimana cara menghapus semua data di database server staging terlebih dahulu, sebelum memulihkan data dari dump produksi?
Saya hanya ingin menghapus semua data saja, jadi saya tidak perlu drop dan membuat database dan sebagainya. Saya hanya ingin menghapus data dan menyisipkan data baru itu saja.
Saya tidak memiliki opsi untuk menghapus dan membuat database karena beberapa alasan. Saya harus menghapus semua data dan hanya menyisipkan saja, jadi apa pun yang diperlukan untuk menemukan cara melakukan ini, saya bersedia melakukannya tetapi jelas membutuhkan bantuan untuk memulai.
Saya juga perlu mengotomatisasi proses ini. Akan mengotomatisasi "membuang data dari db produksi &", lalu "menghapus data pada staging db &", dan kemudian "mengembalikan data ke staging db &". Saya hanya perlu bantuan pada bagian "menghapus data pada staging db &".
Saya berjalan di PostgreSQL 9.5.2
Anda tidak harus menghapus database, cukup dengan menghapus semua objek dalam database. Ini bisa dilakukan dengan menggunakan
Jika Anda kemudian membuat SQL dump termasuk pernyataan
create table
(jadi tanpa opsi--data-only
) semuanya akan baik-baik saja.Anda juga dapat menghapus
--column-inserts
, yang akan membuat impor menjadi lebih cepat.Namun, jika Anda ingin menghapus semuanya, Anda dapat melakukannya dengan sedikit SQL dinamis:
Ini akan memotong semua tabel dalam skema
publik
dengan satu pernyataan yang juga akan bekerja bahkan jika ada banyak kendala kunci asing yang menghubungkan semua tabel. Jika tabel-tabel Anda tersebar di beberapa skema, Anda perlu menambahkannya dalam kondisiwhere
.pg_restore memiliki flag --clean (atau mungkin --create) yang akan menghapus data secara otomatis sebelum menjalankan operasi ...
The Excellent Documentation akan sangat membantu Anda...
Hanya untuk memperjelas, jika hal ini membingungkan:
Ini tidak akan menghilangkan basis data yang sebenarnya ... hanya tabel/tampilan/dll.
Jika, untuk beberapa alasan, menjatuhkan dan membuat ulang tabel tidak dapat diterima, maka Anda harus bekerja lebih keras untuk membuat skrip secara manual yang membuat dump
hanya
data dari db sumber, mengeluarkanTRUNCATE
atauDELETE
di database target, dan kemudian memuat dump data. Tidak ada cara cepat / licin untuk melakukan ini, sejauh yang saya ketahui.Kueri di atas akan menghasilkan kueri terpotong untuk semua tabel dalam database.