Menghapus partisi tertentu beserta seluruh datanya dari tabel partisi. Tindakan ini bersifat permanen dan tidak dapat dikembalikan. Pastikan partisi yang akan dihapus tidak lagi diperlukan atau datanya telah di-backup sebelum menjalankan perintah ini.
Syntax
ALTER TABLE [schema.]table_name DROP PARTITION partition_name;Parameter
Parameter | Wajib | Deskripsi | Contoh |
| Ya | Nama tabel partisi target dimana partisi akan dihapus. |
|
| Ya | Nama partisi yang akan dihapus. |
|
Catatan
Hanya pemilik tabel atau user dengan hak akses yang sesuai yang dapat menjalankan perintah ini.
Anda tidak dapat menghapus partisi terakhir dari tabel terpartisi, karena tabel terpartisi harus memiliki setidaknya satu partisi.
Pernyataan
DROP PARTITIONmemperoleh kunci eksklusif tingkat tabelAccessExclusiveLock. Kunci ini memblokir semua operasi Data Manipulation Language (DML) dan sebagian besar operasi Data Definition Language (DDL) pada tabel. Jalankan pernyataan ini di luar jam sibuk dan alokasikan waktu yang cukup agar proses dapat selesai tanpa mengganggu operasi penting lainnya pada tabel.
Contoh
FAQ
Q1: Mengapa saya menerima error partition "..." of relation "..." does not exist setelah menjalankan perintah?
Nama partisi tidak ada atau terjadi ketidakcocokan huruf besar/kecil. Nama partisi bersifat case-sensitive. Kueri view USER_TAB_PARTITIONS untuk mengonfirmasi nama partisi yang tepat, atau gunakan tanda kutip ganda ("") untuk melakukan pencocokan.
Q2: Mengapa saya menerima error permission denied for table ... atau must be owner of table ...?
Pengguna saat ini tidak memiliki izin yang cukup. Harap beralih ke pemilik tabel atau ke pengguna yang memiliki hak akses yang diperlukan untuk menjalankan perintah tersebut.
Q3: Mengapa saya menerima error cannot drop partition due to dependent objects?
Objek database lain, seperti foreign key constraint atau view, bergantung pada partisi ini. Perilaku RESTRICT default mencegah penghapusan agar tidak dilakukan. Anda harus terlebih dahulu mengidentifikasi dan menghapus objek-objek dependen ini.
Q4: Mengapa operasi berjalan lama atau tampak macet?
Pernyataan DROP PARTITION memperoleh AccessExclusiveLock. Jika kunci ini diblokir oleh transaksi aktif lain yang berjalan lama, operasi tersebut harus menunggu hingga kunci dilepaskan, yang dapat menyebabkan penundaan atau bahkan timeout. Untuk mengidentifikasi sesi yang memblokir, periksa kunci aktif di sistem dengan memeriksa kunci aktif. Kemudian, gunakan blocking_pid dari kueri tersebut untuk menemukan detail sesi dengan pernyataan berikut:
-- Kueri informasi pengguna dari thread yang memblokir berdasarkan PID.
SELECT
pid,
usename AS username, -- Nama pengguna database
application_name, -- Nama aplikasi (seperti JDBC, psql)
client_addr, -- Alamat IP klien
client_hostname, -- Hostname klien
client_port, -- Port klien
backend_start, -- Waktu mulai koneksi
xact_start, -- Waktu mulai transaksi
query_start, -- Waktu mulai kueri saat ini
state_change, -- Waktu terakhir status berubah
state, -- Status (aktif, idle, idle dalam transaksi)
wait_event_type, -- Jenis event tunggu (seperti Lock, IO)
wait_event, -- Event tunggu spesifik
query -- Kueri SQL yang sedang berjalan atau yang terakhir dijalankan
FROM
pg_stat_activity
WHERE
pid in 'blocking_pid'; SQL Terkait
ALTER TABLE ADD PARTITION: Menambahkan partisi baru ke tabel terpartisi.
ALTER TABLE TRUNCATE PARTITION: Menghapus semua data dari partisi tanpa menghapus partisi itu sendiri.
ALTER TABLE SPLIT PARTITION: Membagi satu partisi menjadi dua partisi.