Réponses:
Il ne semble pas y avoir de moyen de spécifier un index dans la CREATE TABLE
syntaxe. PostgreSQL crée cependant un index pour les contraintes uniques et les clés primaires par défaut, comme décrit dans cette note :
PostgreSQL crée automatiquement un index pour chaque contrainte unique et contrainte de clé primaire afin de renforcer l'unicité.
En dehors de cela, si vous souhaitez un index non unique, vous devrez le créer vous-même dans une CREATE INDEX
requête distincte .
Peter Krauss recherche une réponse canonique:
Il existe une SYNTAXE MODERNE (année 2020), veuillez donc expliquer et montrer des exemples, compatible avec postgresql.org/docs/current/sql-createtable.html
Vous recherchez une définition d'index en ligne , qui n'est pas disponible pour PostgreSQL jusqu'à la version actuelle 12. Sauf la contrainte UNIQUE / PRIMARY KEY, qui crée un index sous-jacent pour vous.
[CONSTRAINT nom_contrainte] {CHECK (expression) [NO INHERIT] | UNIQUE (nom_colonne [, ...]) paramètres_index | PRIMARY KEY (nom_colonne [, ...]) paramètres_index |
Exemple de syntaxe de définition de colonne en ligne (ici 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 justification de leur introduction est assez intéressante. Que sont les index en ligne? par Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
.. comment ajouter plus de paramètres sans répéter le nom de la colonne?
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
en syntaxe de définition d'index en ligne . PS: cette question concerne PostgreSQL et non Microsoft-SQL-Server (voir les balises).