Skip to main content

CreateIndexStatement

Struct CreateIndexStatement 

Source
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: bool

CREATE 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: IndexColumnOrder

v7.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: bool

v7.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: IndexMethod

Optional USING <method> clause. v2.0 recognises hnsw (NSW graph for vector kNN); unspecified is the default B-tree index.

§if_not_exists: bool

IF 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: bool

v7.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

Source§

fn clone(&self) -> CreateIndexStatement

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CreateIndexStatement

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for CreateIndexStatement

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for CreateIndexStatement

Source§

fn eq(&self, other: &CreateIndexStatement) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for CreateIndexStatement

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.