PolarDB for PostgreSQL tidak menyediakan log undo. Kesalahan operasi dapat menyebabkan kehilangan data, seperti saat menjalankan pernyataan DROP TABLE. Fitur drop flashback pada PolarDB for PostgreSQL memungkinkan pemulihan cepat tabel yang dihapus, melihat isi tempat sampah, dan membersihkannya untuk mengembalikan data.
Prasyarat
Fitur ini didukung pada kluster PolarDB for PostgreSQL dengan mesin berikut:
PostgreSQL 11 (versi revisi 1.1.30 atau lebih baru)
PostgreSQL 14 (versi revisi 14.9.15.0 atau lebih baru)
Eksekusi salah satu pernyataan berikut untuk memeriksa versi revisi kluster PolarDB for PostgreSQL:
PostgreSQL 11
show polar_version;PostgreSQL 14
select version();
Peringatan
Aktifkan fitur drop flashback hanya saat menghapus tabel penting. Gunakan fitur ini dengan hati-hati dalam operasi rutin.
Saat fitur drop flashback diaktifkan, tabel yang dihapus dipindahkan ke mode tempat sampah dan tidak benar-benar dihapus. Ruang disk yang digunakan oleh tabel tersebut tidak dilepaskan, sehingga dapat meningkatkan penggunaan ruang disk jika banyak data menumpuk di tempat sampah. Bersihkan tempat sampah secara berkala.
Upaya untuk menghapus dependensi tabel yang dihapus mungkin gagal karena tabel tersebut masih ada dan menggunakan dependensinya.
Tabel yang dihapus dipindahkan ke mode recyclebin. Hindari membuat mode dengan nama recyclebin, karena tabel dalam mode recyclebin dapat dibersihkan menggunakan pernyataan
purge recyclebin.Saat fitur drop flashback diaktifkan, operasi berikut tidak didukung:
Tabel partisi dan tabel sementara yang dihapus tidak dapat dikembalikan karena dihapus secara permanen.
Pemicu acara
sql_droptidak didukung.
Parameter
Parameter | Tipe Data | Deskripsi |
polar_enable_flashback_drop | BOOL | Menentukan apakah akan mengaktifkan fitur drop flashback. Nilai default: OFF. Nilai valid:
|
Sintaksis
Fitur drop flashback mendukung pernyataan SQL berikut:
Delete a table
drop table table_name; # Pindahkan tabel ke ruang yang berjalan dalam mode tempat sampah. drop table table_name purge; # Hapus tabel. Tabel tidak dapat dipulihkan.Restore a deleted table
flashback table table_name to before drop; # Pulihkan tabel yang dihapus. Jika ada tabel dengan nama yang sama, tabel terbaru yang dipulihkan. flashback table table_name to before drop rename to table_name_1; # Pulihkan dan ubah nama tabel yang dihapus.Permanently delete files from the recycle bin
purge table table_name;CatatanJika ada tabel dengan nama yang sama, tabel tertua akan dihapus.
Clear the recycle bin
purge recyclebin;CatatanIzin polar_super_user diperlukan untuk membersihkan tempat sampah.
View recycle bin information
show recyclebin;
Uji kinerja
Siapkan data untuk pengujian.
Buat tabel test1 dan tabel
test2, lalu masukkan data ke dalamnya.CREATE TABLE test1(id int primary key, name text); CREATE TABLE test2(id int primary key, name text); INSERT INTO test1 select t,repeat('test1',1024) from generate_series(1, 10000) as t; INSERT INTO test2 select t,repeat('test2',1024) from generate_series(1, 10000) as t; \dtHasil contoh:
Daftar relasi Skema | Nama | Tipe | Pemilik --------+-------+-------+---------- public | test1 | tabel | postgres public | test2 | tabel | postgres (2 baris)Hapus tabel dan lihat tempat sampah.
Hapus tabel
test1dantest2.DROP TABLE test1; DROP TABLE test2; \dtHasil contoh:
Tidak menemukan relasi apa pun.Lihat tempat sampah.
show recyclebin;Hasil contoh:
table_catalog | table_name | table_type ---------------+-----------------------------+------------ postgres | public$test1$69461331094004 | BASE TABLE postgres | public$test2$69461332967609 | BASE TABLE (2 baris)
Kembalikan tabel yang dihapus.
Pulihkan tabel yang dihapus.
FLASHBACK TABLE test1 TO BEFORE DROP; FLASHBACK TABLE test2 TO BEFORE DROP RENAME TO test3; \dtHasil contoh:
Daftar relasi Skema | Nama | Tipe | Pemilik --------+-------+-------+---------- public | test1 | tabel | postgres public | test3 | tabel | postgres (2 baris)CatatanTabel
test2diubah namanya menjaditest3.Lihat data yang dipulihkan.
Lihat data dalam tabel
test1.SELECT count(*) FROM test1;Hasil contoh:
count ------- 10000 (1 baris)Lihat data dalam tabel
test3.SELECT count(*) FROM test3;Hasil contoh:
count ------- 10000 (1 baris)