Respuestas:
No parece haber ninguna forma de especificar un índice en la CREATE TABLE
sintaxis. Sin embargo, PostgreSQL crea un índice para restricciones únicas y claves primarias de forma predeterminada, como se describe en esta nota :
PostgreSQL crea automáticamente un índice para cada restricción única y restricción de clave principal para hacer cumplir la singularidad.
Aparte de eso, si desea un índice no único, deberá crearlo usted mismo en una CREATE INDEX
consulta separada .
Peter Krauss busca una respuesta canónica:
Hay una SINTAXIS MODERNA (año 2020), así que explique y muestre ejemplos, compatible con postgresql.org/docs/current/sql-createtable.html
Está buscando una definición de índice en línea , que no está disponible para PostgreSQL hasta la versión actual 12. Excepto la restricción UNIQUE / PRIMARY KEY, que crea un índice subyacente para usted.
[RESTRICCIÓN nombre_restricción] {CHECK (expresión) [NO HEREDA] | UNIQUE (column_name [, ...]) index_parameters | CLAVE PRIMARIA (nombre_columna [, ...]) parámetros_índice |
La sintaxis de muestra de la definición de columna en línea (aquí 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 razón de ser de su introducción es bastante interesante. ¿Qué son los índices en línea? por Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
... cómo agregar más parámetros sin repetir el nombre de la columna?
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
en sintaxis de definición de índice en línea . PD: esta pregunta es sobre PostgreSQL, no sobre Microsoft-SQL-Server (ver etiquetas).