Saya melihat beberapa pembuatan tabel PostgreSQL dan saya menemukan ini:
CREATE TABLE (
...
) WITH ( OIDS = FALSE );
Saya membaca dokumentasi yang disediakan oleh postgres dan saya tahu konsep pengenal objek dari OOP tetapi saya masih tidak mengerti,
- mengapa pengidentifikasi seperti itu akan berguna dalam database?
- untuk membuat pertanyaan lebih pendek?
- kapan itu harus digunakan?
sql
database
performance
postgresql
fabrizioM
sumber
sumber
old
kolom sistem .Jawaban:
OID pada dasarnya memberi Anda id internal yang unik secara global untuk setiap baris, yang terkandung dalam kolom sistem (bukan kolom ruang pengguna). Itu berguna untuk tabel di mana Anda tidak memiliki kunci utama, memiliki baris duplikat, dll. Misalnya, jika Anda memiliki tabel dengan dua baris yang identik, dan Anda ingin menghapus yang tertua dari keduanya, Anda bisa melakukannya dengan menggunakan kolom oid.
Dalam pengalaman saya, fitur ini umumnya tidak digunakan di sebagian besar aplikasi yang didukung postgres (mungkin sebagian karena mereka non-standar), dan penggunaannya pada dasarnya sudah usang :
sumber
OID masih digunakan untuk Postgres dengan objek besar (meskipun beberapa orang berpendapat objek besar umumnya tidak berguna). Mereka juga digunakan secara luas oleh tabel sistem . Mereka digunakan misalnya oleh TOAST yang menyimpan lebih besar dari 8KB BYTEA (dll.) Ke area penyimpanan terpisah (transparan) yang digunakan secara default oleh semua tabel . Penggunaan langsung mereka yang terkait dengan tabel pengguna "normal" pada dasarnya sudah usang .
Rupanya urutan OID "tidak" membungkus jika melebihi 4B 6 . Jadi pada dasarnya ini adalah penghitung global yang dapat membungkus. Jika itu membungkus, beberapa pelambatan mungkin mulai terjadi ketika digunakan dan "mencari" nilai-nilai unik, dll.
Lihat juga https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F
sumber
OID sedang dihapus
Tim inti yang bertanggung jawab untuk Postgres secara bertahap menghapus OID.
Postgres 12 menghapus perilaku khusus kolom OID
Penggunaan OID sebagai kolom sistem opsional pada tabel Anda sekarang dihapus dari Postgres 12. Anda tidak dapat lagi menggunakan:
CREATE TABLE … WITH OIDS
perintahdefault_with_oids (boolean)
pengaturan kompatibilitasTipe data
OID
tetap di Postgres 12. Anda dapat secara eksplisit membuat kolom dari tipe tersebutOID
.Setelah bermigrasi ke Postgres 12 , kolom sistem apa pun yang ditentukan secara opsional
oid
tidak akan lagi terlihat oleh default. PertunjukanSELECT *
sekarang akan mencakup kolom ini. Perhatikan bahwa kolom "kejutan" ekstra ini dapat memecah kode SQL yang ditulis dengan naif.sumber
Untuk menghapus semua OID dari tabel basis data Anda, Anda dapat menggunakan skrip Linux ini:
Pertama, masuk sebagai superuser PostgreSQL:
Sekarang jalankan skrip ini, ubah YOUR_DATABASE_NAME dengan nama basis data Anda:
Saya menggunakan skrip ini untuk menghapus semua OID saya, karena Npgsql 3.0 tidak berfungsi dengan ini, dan tidak penting lagi untuk PostgreSQL.
sumber