Jawaban:
Sepertinya tidak ada cara untuk menentukan indeks dalam CREATE TABLE
sintaks. Namun PostgreSQL membuat indeks untuk batasan unik dan kunci utama secara default, seperti yang dijelaskan dalam catatan ini :
PostgreSQL secara otomatis membuat indeks untuk setiap batasan unik dan batasan kunci utama untuk menerapkan keunikan.
Selain itu, jika Anda menginginkan indeks non-unik, Anda harus membuatnya sendiri dalam CREATE INDEX
kueri terpisah .
Peter Krauss sedang mencari jawaban kanonik:
Ada SINTAX MODERN (tahun 2020), jadi tolong jelaskan dan tunjukkan contoh, kompatibel dengan postgresql.org/docs/current/sql-createtable.html
Anda sedang mencari definisi indeks sebaris , yang tidak tersedia untuk PostgreSQL hingga versi 12. Kecuali kendala UNIQUE / PRIMARY KEY, yang membuat indeks dasar untuk Anda.
[CONSTRAINT constraint_name] {CHECK (ekspresi) [TANPA WARIS] | UNIQUE (nama_kolom [, ...]) parameter_indeks | KUNCI UTAMA (nama_kolom [, ...]) parameter_indeks |
Sintaks sampel definisi kolom sebaris (di sini 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
);
Alasan di balik memperkenalkannya cukup menarik Apa itu Indeks Inline? oleh Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
.. bagaimana menambahkan lebih banyak parameter tanpa mengulang nama kolom?
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
menjadi sintaks definisi indeks sebaris . NB: pertanyaan ini tentang PostgreSQL bukan Microsoft-SQL-Server (lihat tag).