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

Bagaimana PostgreSQL menerapkan batasan UNIK / jenis indeks apa yang digunakannya?

atau - buat indeks dan jangan berasumsi bahwa nilainya unik

Itu adalah aman untuk mengasumsikan bahwa nilai adalah unik, jika Anda memiliki indeks unik yang ditentukan. Begitulah cara batasan unik diterapkan (saat ini, dan mungkin juga di semua versi mendatang).

Mendefinisikan UNIQUE kendala secara efektif sama (hampir, lihat di bawah) sebagai membuat indeks unik tanpa menentukan jenis indeks. Dan, saya mengutip manualnya:

Pilihannya adalah btree, hash, Gist, dan gin. Metode defaultnya adalah btree.

Menambahkan batasan hanyalah cara kanonik yang tidak akan rusak di versi mendatang yang bisa diimplementasikan secara berbeda. Itu saja.

Dan tidak, batasan unik hanya dapat diimplementasikan dengan btree basic dasar indeks di semua versi hingga dan termasuk PostgreSQL v14. Saya mengutip paragraf "ADD table_constraint_using_index" dalam manual di sini:

Indeks tidak boleh memiliki kolom ekspresi atau menjadi indeks parsial. Juga, itu harus berupa indeks b-tree dengan pengurutan pengurutan default.

###Perbedaan lainnya

  • Pembatasan unik dapat ditangguhkan . Itu tidak mungkin untuk indeks unik. Lihat SET CONSTRAINTS perintah dan ikuti tautan untuk informasi lainnya.
- **foreign key** tidak dapat mereferensikan kolom dengan *hanya* indeks unik. [Manual:][4]

Kunci asing harus mereferensikan kolom yang merupakan kunci utama atau membentuk batasan unik.

Bit terakhir tampaknya sudah ketinggalan zaman atau kesalahpahaman dari awal. Lihat:

  • Nilai NULL untuk kolom referential_constraints.unique_constraint_* dalam skema informasi

Terkait:

  • Apakah indeks unik lebih baik daripada batasan unik ketika saya membutuhkan indeks dengan kelas operator



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Izin ditolak untuk hubungan

  2. Bidang model unik di Django dan sensitivitas huruf besar-kecil (postgres)

  3. di postgres, dapatkah Anda mengatur pemformatan default untuk stempel waktu, berdasarkan sesi atau secara global?

  4. Kesalahan PostgreSQL:Fatal:nama pengguna peran tidak ada

  5. cara menggunakan tipe data Blob di Postgres