Postgresql

PostgreSQL 代理鍵:使用序列/bigint 還是 OID?

  • September 27, 2021

我正在研究我在 PostgreSQL 派生的 DBMS ( Citus ) 上設計的表中是否需要代理鍵。OID 夠用嗎?使用它們而不是創建bigint欄位和序列有缺點嗎?

OID

來自文件http://www.postgresql.org/docs/9.4/static/datatype-oid.html

oid 類型目前實現為無符號四字節整數。因此,它不足以在大型數據庫甚至大型單個表中提供數據庫範圍的唯一性。因此,不鼓勵使用使用者創建表的 OID 列作為主鍵。OID 最好僅用於對系統表的引用。

bigint 和一個序列

正如“_a_horse_with no_name”建議使用 bigserial

  • 小序列 2 字節
  • 串列 4 字節
  • 大序列 8 字節

注意:smallserial 和 serial 似乎沒有克服上面指定的 4 個字節的大小限制。可能其他人可以填寫。

數據類型 smallserial、serial 和 bigserial 不是真正的類型,而只是一種用於創建唯一標識符列的符號方便(類似於某些其他數據庫支持的 AUTO_INCREMENT 屬性)

http://www.postgresql.org/docs/9.5/static/datatype-numeric.html#DATATYPE-SERIAL

引用自:https://dba.stackexchange.com/questions/127943