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

Bagaimana cara membuat urutan partisi PostgreSQL?

Saya tidak percaya ada cara sederhana yang semudah urutan biasa, karena:

  1. Sebuah urutan hanya menyimpan satu aliran angka (nilai berikutnya, dll.). Anda ingin satu untuk setiap partisi.
  2. Sequence memiliki penanganan khusus yang melewati transaksi saat ini (untuk menghindari kondisi balapan). Sulit untuk meniru ini di tingkat SQL atau PL/pgSQL tanpa menggunakan trik seperti dblink.
  3. Properti kolom DEFAULT dapat menggunakan ekspresi sederhana atau panggilan fungsi seperti nextval('myseq'); tetapi tidak dapat merujuk ke kolom lain untuk menginformasikan fungsi dari aliran mana nilai harus berasal.

Anda dapat membuat sesuatu yang berhasil, tetapi Anda mungkin tidak akan menganggapnya sederhana. Mengatasi masalah di atas secara bergantian:

  1. Gunakan tabel untuk menyimpan nilai berikutnya untuk semua partisi, dengan skema seperti multiseq (partition_id, next_val) .
  2. Tulis multinextval(seq_table, partition_id) fungsi yang melakukan sesuatu seperti berikut:

    1. Buat transaksi baru yang independen dari transaksi saat ini (salah satu cara melakukannya adalah melalui dblink; saya yakin beberapa bahasa server lain dapat melakukannya dengan lebih mudah).
    2. Kunci tabel yang disebutkan di seq_table .
    3. Perbarui baris dengan id partisi partition_id , dengan nilai yang bertambah. (Atau masukkan baris baru dengan nilai 2 jika belum ada.)
    4. Lakukan transaksi itu dan kembalikan id yang disimpan sebelumnya (atau 1).
  3. Buat pemicu penyisipan pada tabel proyek Anda yang menggunakan panggilan ke multinextval('projects_table', NEW.Project_ID) untuk penyisipan.

Saya sendiri belum pernah menggunakan seluruh rencana ini, tetapi saya telah mencoba sesuatu yang mirip dengan setiap langkah satu per satu. Contoh multinextval fungsi dan pemicu dapat disediakan jika Anda ingin mencoba ini...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat koneksi ke Postgres melalui Node.js

  2. Bagaimana cara menyesuaikan file konfigurasi gambar Docker PostgreSQL resmi?

  3. Analisis Log PostgreSQL Dengan pgBadger

  4. Apa pro dan kontra melakukan perhitungan dalam sql vs. di aplikasi Anda?

  5. Bidang model unik yang tidak peka huruf besar-kecil di Django?