Risposte:
Non sembra esserci alcun modo per specificare un indice nella CREATE TABLE
sintassi. PostgreSQL, tuttavia, crea un indice per vincoli univoci e chiavi primarie per impostazione predefinita, come descritto in questa nota :
PostgreSQL crea automaticamente un indice per ogni vincolo univoco e vincolo di chiave primaria per rafforzare l'unicità.
Oltre a questo, se desideri un indice non univoco, dovrai crearlo tu stesso in una CREATE INDEX
query separata .
Peter Krauss sta cercando una risposta canonica:
Esiste una SINTASSI MODERNA (anno 2020), quindi spiega e mostra esempi, compatibile con postgresql.org/docs/current/sql-createtable.html
Stai cercando la definizione dell'indice in linea , che non è disponibile per PostgreSQL fino alla versione corrente 12. Eccetto il vincolo UNIQUE / PRIMARY KEY, che crea l'indice sottostante per te.
[CONSTRAINT nome_vincolo] {CHECK (espressione) [NO INHERIT] | UNIQUE (nome_colonna [, ...]) parametri_indice | CHIAVE PRIMARIA (nome_colonna [, ...]) parametri_indice |
La sintassi di esempio della definizione di colonna inline (qui 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
);
La logica alla base della loro introduzione è piuttosto interessante Cosa sono gli indici in linea? di Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
.. come aggiungere più parametri senza ripetere il nome della colonna?
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
nella sintassi della definizione dell'indice in linea . PS: questa domanda riguarda PostgreSQL e non Microsoft-SQL-Server (vedi tag).