PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

W jaki sposób PostgreSQL wymusza ograniczenie UNIQUE / jakiego rodzaju indeksu używa?

lub - utwórz indeks i nie zakładaj, że wartości są unikalne

To jest można bezpiecznie założyć, że wartości unikalny, jeśli masz zdefiniowany unikalny indeks. W ten sposób implementowane są unikalne ograniczenia (w chwili obecnej i prawdopodobnie również we wszystkich przyszłych wersjach).

Definiowanie UNIQUE ograniczenie robi skutecznie to samo (prawie, patrz poniżej) jako tworzenie unikalnego indeksu bez określania typu indeksu. I cytuję instrukcję:

Do wyboru są btree, hash, gist i gin. Domyślną metodą jest btree.

Dodanie ograniczenia to tylko kanoniczny sposób, który nie zawiedzie w przyszłych wersjach, w których może być realizowane inaczej. To wszystko.

I nie, unikalne ograniczenie można zaimplementować tylko z podstawowym btree indeks we wszystkich wersjach do PostgreSQL v14 włącznie. Cytuję akapit „ADD table_constraint_using_index” w instrukcji tutaj:

Indeks nie może zawierać kolumn wyrażeń ani być indeksem częściowym. Ponadto musi to być indeks b-drzewa z domyślnym porządkiem sortowania.

###Inne różnice

  • Unikalne ograniczenia można odroczyć . Nie jest to możliwe w przypadku unikalnych indeksów. Spójrz na SET CONSTRAINTS polecenie i podążaj za linkami, aby uzyskać więcej.
- **Klucz obcy** nie może odwoływać się do kolumn z *tylko* unikalnym indeksem. [Instrukcja:][4]

Klucz obcy musi odwoływać się do kolumn, które są albo kluczem podstawowym, albo tworzą unikatowe ograniczenie.

Ostatni fragment wydaje się przestarzały lub nieporozumienie od samego początku. Zobacz:

  • Wartości NULL dla kolumn referential_constraints.unique_constraint_* w schemacie informacyjnym

Powiązane:

  • Czy unikalny indeks jest lepszy niż unikalne ograniczenie, gdy potrzebuję indeksu z klasą operatora



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Monitorowanie dystrybucji Percona dla PostgreSQL — kluczowe metryki

  2. Wstaw wyzwalacz, aby zaktualizować inną tabelę za pomocą PostgreSQL

  3. Uprość zagnieżdżoną wielkość liter, gdy instrukcja

  4. @BatchSize inteligentne czy głupie zastosowanie?

  5. Aktualizacje wielowierszowe PostgreSQL w Node.js