PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как PostgreSQL налага ограничението UNIQUE / какъв тип индекс използва?

или - създайте индекс и не приемайте, че стойностите са уникални

Тона безопасно да приемем, че стойностиса уникален, ако имате дефиниран уникален индекс. Ето как се прилагат уникалните ограничения (в момента, а вероятно и във всички бъдещи версии).

Дефиниране на UNIQUE constraint вършина практика същото (почти, вижте по-долу) като създаване на уникален индекс без указване на типа на индекса. И цитирам ръководството:

Изборите са btree, hash, gist и gin. Методът по подразбиране е btree.

Добавянето на ограничение е просто каноничният начин, който няма да се счупи в бъдещи версии, където може да бъдат приложени по различен начин. Това е всичко.

И не, уникално ограничение може да се реализира само с основноbtree индекс във всички версии до и включително PostgreSQL v14. Цитирам параграфа "ADD table_constraint_using_index" в ръководството тук:

Индексът не може да има изразни колони, нито да бъде частичен индекс. Освен това трябва да е индекс на b-дърво с подреждане на сортиране по подразбиране.

###Други разлики

  • Уникалните ограничения могат да бъдат отложени . Това не е възможно за уникални индекси. Разгледайте SET CONSTRAINTS команда и следвайте връзките за повече.
- **Външен ключ** не може да препраща към колони с *само* уникален индекс. [Ръководството:][4]

Външният ключ трябва да препраща към колони, които или са първичен ключ, или представляват уникално ограничение.

Последният бит изглежда е остарял или е недоразумение от самото начало. Вижте:

  • NULL стойности за колони referential_constraints.unique_constraint_* в информационна схема

Свързано:

  • Уникалният индекс по-добър ли е от уникалното ограничение, когато имам нужда от индекс с операторен клас



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Дизайн на база данни за създаване на таблици в движение

  2. postgresql - брой (без нулеви стойности) на всяка колона в таблица

  3. Как се среща с математика, която игнорира годината?

  4. Конвертирайте PostgreSQL масив в PHP масив

  5. вземете таблица JOIN като масив от резултати с PostgreSQL/NodeJS