PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Tabel sementara PostgreSQL

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 dengan CREATE 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 menggunakan ON COMMIT DROP sintaks pembuatan), atau sesuai kebutuhan (dengan mendahului CREATE TEMPORARY TABLE pernyataan dengan DROP 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 di postgresql.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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Round() Bekerja di PostgreSQL

  2. Bagaimana EDB Menjadi Pemimpin di Pasar Postgres

  3. Kapan nama kolom atau tabel Postgres membutuhkan tanda kutip dan kapan tidak?

  4. Cara mengurutkan hasil dari string_agg()

  5. Bagaimana cara membuat indeks unik di mana urutan kolom tidak diperhitungkan (set?)