Odpowiedzi:
Wydaje się, że nie ma sposobu na określenie indeksu w CREATE TABLE
składni. PostgreSQL domyślnie tworzy jednak indeks dla ograniczeń unikatowych i kluczy podstawowych, jak opisano w tej uwadze :
PostgreSQL automatycznie tworzy indeks dla każdego ograniczenia unikatowego i ograniczenia klucza podstawowego, aby wymusić unikalność.
Poza tym, jeśli chcesz mieć nieunikalny indeks, musisz utworzyć go samodzielnie w osobnym CREATE INDEX
zapytaniu.
Peter Krauss szuka kanonicznej odpowiedzi:
Istnieje NOWOCZESNA SKŁADNIA (rok 2020), więc proszę wyjaśnij i pokaż przykłady, zgodne z postgresql.org/docs/current/sql-createtable.html
Poszukujesz definicji indeksu wbudowanego , która nie jest dostępna dla PostgreSQL do aktualnej wersji 12. Z wyjątkiem ograniczenia UNIQUE / PRIMARY KEY, które tworzy indeks bazowy.
[CONSTRAINT nazwa_ograniczenia] {CHECK (wyrażenie) [NO INHERIT] | UNIQUE (nazwa_kolumny [, ...]) parametry_indeksu | PRIMARY KEY (nazwa_kolumny [, ...]) parametry_indeksu |
Przykładowa składnia definicji kolumn wbudowanych (tutaj SQL Server):
CREATE TABLE tab(
id INT PRIMARY KEY, -- constraint
c INT INDEX filtered (c) WHERE c > 10, -- filtered index
b VARCHAR(10) NOT NULL INDEX idx_tab_b, -- index on column
d VARCHAR(20) NOT NULL,
INDEX my_index NONCLUSTERED(d) -- index on column as separate entry
);
Uzasadnienie ich wprowadzenia jest dość interesujące. Czym są indeksy wbudowane? przez Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
.. jak dodać więcej parametrów bez powtarzania nazwy kolumny?
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
w składnię definicji indeksu wbudowanego . PS: to pytanie dotyczy PostgreSQL, a nie Microsoft-SQL-Server (zobacz tagi).