Harap dicatat bahwa, di Postgres, perilaku default untuk tabel sementara adalah tabel tersebut tidak dihapus secara otomatis, dan data tetap ada saat dikomit. Lihat ON COMMIT
.
Tabel sementara, bagaimanapun, dijatuhkan pada akhir sesi database:
Tabel sementara secara otomatis dijatuhkan pada akhir sesi, atau opsional pada akhir transaksi saat ini.
Ada beberapa pertimbangan yang harus Anda pertimbangkan:
- Jika Anda ingin secara eksplisit
DROP
tabel sementara di akhir transaksi, buat denganCREATE TEMPORARY TABLE ... ON COMMIT DROP
sintaks. - Dengan adanya penyatuan koneksi , sesi database dapat menjangkau beberapa sesi klien; untuk menghindari bentrokan di
CREATE
, Anda harus menghapus tabel sementara -- baik sebelum mengembalikan koneksi ke kumpulan (mis. dengan melakukan segala sesuatu di dalam transaksi dan menggunakanON COMMIT DROP
sintaks pembuatan), atau sesuai kebutuhan (dengan mendahuluiCREATE TEMPORARY TABLE
pernyataan denganDROP TABLE IF EXISTS
yang sesuai , yang memiliki keuntungan juga bekerja di luar transaksi mis. jika koneksi digunakan dalam mode komit otomatis.) - Sementara tabel sementara sedang digunakan, berapa banyak yang akan muat di memori sebelum meluap ke disk? Lihat
temp_buffers
opsi dipostgresql.conf
- Apakah ada hal lain yang perlu saya khawatirkan ketika sering bekerja dengan tabel sementara? Direkomendasikan vakum setelah Anda MENJAUHKAN tabel sementara, untuk membersihkan tupel mati dari katalog. Postgres akan secara otomatis menyedot debu setiap 3 menit atau lebih untuk Anda saat menggunakan pengaturan default (
auto_vacuum
).
Juga, tidak terkait dengan pertanyaan Anda (tetapi mungkin terkait dengan proyek Anda):perlu diingat bahwa, jika Anda harus menjalankan kueri terhadap tabel temp setelah Anda telah mengisinya, maka merupakan ide bagus untuk membuat indeks yang sesuai dan mengeluarkan ANALYZE
di tabel temp yang dimaksud setelah Anda selesai memasukkan ke dalamnya. Secara default, pengoptimal berbasis biaya akan menganggap bahwa tabel temp yang baru dibuat memiliki ~1000 baris dan ini dapat mengakibatkan kinerja yang buruk jika tabel temp benar-benar berisi jutaan baris.