pub struct CreateIndexStatement {Show 16 fields
pub name: String,
pub concurrently: bool,
pub key_order: IndexColumnOrder,
pub key_collation: Option<String>,
pub table: String,
pub column: String,
pub nulls_not_distinct: bool,
pub method: IndexMethod,
pub if_not_exists: bool,
pub included_columns: Vec<String>,
pub partial_predicate: Option<Expr>,
pub expression: Option<Expr>,
pub extra_columns: Vec<String>,
pub is_unique: bool,
pub opclass: Option<String>,
pub method_name: Option<String>,
}Fields§
§name: String§concurrently: boolCREATE INDEX CONCURRENTLY. SPG builds indexes synchronously
either way, so this changes nothing about how the index is made
— it is carried because PG refuses the CONCURRENTLY form inside
a transaction block and accepts the plain one, and the engine
cannot tell them apart without it.
key_order: IndexColumnOrderv7.39 (round 537) — the leading key column’s ordering clause, which is the column SPG indexes.
key_collation: Option<String>v7.39 (round 538) — an explicit COLLATE on that key, as
written. SPG orders text by bytes, so honouring it changes
nothing; PG prints it, because an explicitly named collation and
the one a column inherits are different objects.
table: String§column: String§nulls_not_distinct: boolv7.39 (read01 round 52) — CREATE UNIQUE INDEX … NULLS NOT DISTINCT
(PG 15+). Default (false) is the SQL-standard NULLS DISTINCT, where
any NULL in the key exempts the row from the uniqueness check.
method: IndexMethodOptional USING <method> clause. v2.0 recognises hnsw (NSW
graph for vector kNN); unspecified is the default B-tree index.
if_not_exists: boolIF NOT EXISTS — engine returns CommandOk no-op when the
index name already exists, instead of raising DuplicateIndex.
included_columns: Vec<String>v6.8.0 — INCLUDE (col1, col2, …) columns. Identifies the
non-key columns the planner should treat as “covered” by
this index when checking whether a query can run as an
index-only scan. Empty when no INCLUDE clause was given.
partial_predicate: Option<Expr>v6.8.1 — WHERE <expr> partial-index predicate. Only rows
for which <expr> evaluates truthy enter the index;
queries whose WHERE clause’s canonical Display form
matches this expression’s Display form can be served by the
partial index. Stored as a parsed Expr so the engine
re-uses the existing evaluation path; storage persists the
Display form on the catalog snapshot.
expression: Option<Expr>v6.8.2 — expression-based index. When Some(expr), the
index key is the result of expr evaluated on each row
(e.g. CREATE INDEX … (lower(name))). The column
field still names the primary column the expression
touches so existing planner shortcuts that resolve a
column position stay valid. None = plain
column-reference index (the legacy shape).
extra_columns: Vec<String>v7.9.14 — extra column names after the leading column in a
multi-column CREATE INDEX … (a, b, c). mailrs F2. The
planner today still only uses the leading column for index
seeks; the extras are tracked verbatim so the same DDL
round-trips through WAL replay + catalog snapshot, and so
the engine can emit a clear warning at INDEX CREATE time
that only the leading column is currently honoured.
Composite BTree index keys land in v7.10.
is_unique: boolv7.9.29 — CREATE UNIQUE INDEX …. When true the engine
enforces uniqueness on the indexed key (combined with the
partial_predicate filter — only rows where the predicate
evaluates truthy enter the uniqueness check). Standard SQL
and PG’s canonical way to express conditional uniqueness.
mailrs K1.
opclass: Option<String>v7.15.0 — operator class on the leading column, when the
CREATE INDEX named one ((col vector_cosine_ops) shape).
Lower-cased. Most opclasses are still informational; the
engine routes on gin_trgm_ops specifically to build a
trigram-shingle GIN over a TEXT column, and otherwise
keeps the current “accepted and discarded” behaviour for
pg_dump compatibility.
method_name: Option<String>r1038 — the access method as WRITTEN, lower-cased; None when
there was no USING clause.
method cannot answer this: gist / spgist / hash all become
IndexMethod::BTree so PG schemas naming an AM SPG has no
implementation for still load. That degradation is deliberate, but
it loses the name — and the operator-class check needs it, both to
look the class up under the AM the user actually named and to say
which AM it was missing from, the way PG’s message does.
Trait Implementations§
Source§impl Clone for CreateIndexStatement
impl Clone for CreateIndexStatement
Source§fn clone(&self) -> CreateIndexStatement
fn clone(&self) -> CreateIndexStatement
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more