Respostas:
Não parece haver nenhuma maneira de especificar um índice na CREATE TABLE
sintaxe. PostgreSQL, no entanto, cria um índice para restrições exclusivas e chaves primárias por padrão, conforme descrito nesta nota :
O PostgreSQL cria automaticamente um índice para cada restrição única e restrição de chave primária para garantir a exclusividade.
Além disso, se você quiser um índice não exclusivo, precisará criá-lo em uma CREATE INDEX
consulta separada .
Peter Krauss está procurando uma resposta canônica:
Há uma SINTAXE MODERNA (ano 2020), então explique e mostre exemplos, compatível com postgresql.org/docs/current/sql-createtable.html
Você está procurando uma definição de índice embutido , que não está disponível para PostgreSQL até a versão atual 12. Exceto a restrição UNIQUE / PRIMARY KEY, que cria o índice subjacente para você.
[CONSTRAINT constraint_name] {CHECK (expression) [NO HHERIT] | UNIQUE (column_name [, ...]) index_parameters | PRIMARY KEY (column_name [, ...]) index_parameters |
O exemplo de sintaxe de definição de coluna inline (aqui 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
);
A lógica por trás de sua introdução é bastante interessante. O que são índices embutidos? por Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
.. como adicionar mais parâmetros sem repetir o nome da coluna?
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
em sintaxe de definição de índice embutido . PS: esta questão é sobre PostgreSQL e não Microsoft-SQL-Server (veja as tags).