Skip to content

[ORM] ORM always destroy my manual set indexes. (e.g. when using pgvector) #2731

Description

@iPommes

Description and expected behavior
When using PostgreSQL extensions like pgvector and manually creating indexes in migrations the ORM will automatically roll back these manual changes and want to DROP these indexes.

How to reproduce?

  1. Add a "Unsupported" field to the schema.zmodel
  2. Create a index using `bun zen migrate dev --create-only"
  3. Add indexes manually in this migrations
  4. Run bun zen migrate dev to apply -> In this case the CLI automatically creates another migration which always DROPs these manual indexes (running bun zen migrate deploy mitigates this one time, but after another migrations it automatically drops all manual indexes again)

Environment (please complete the following information):

  • ZenStack version: 3.8.0
  • Database type: PostgreSQL
  • Node.js/Bun version: Bun v1.3.14
  • Package manager: Bun

Sample schema

type Vectors {
    dimensions Int?

    vec384     Unsupported("vector(384)")?
    vec768     Unsupported("vector(768)")?
    vec1024    Unsupported("vector(1024)")?
    vec1536    Unsupported("vector(1536)")?
    vec3072    Unsupported("halfvec(3072)")?
}

model Chunk with Vectors {
  id String @id @default(uuid())
}

Manual indexes in sql

-- ============================================================
-- CHUNKS
-- ============================================================

CREATE INDEX IF NOT EXISTS idx_chunks_vec384
  ON chunks USING HNSW ("vec384" vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

CREATE INDEX IF NOT EXISTS idx_chunks_vec768
  ON chunks USING HNSW ("vec768" vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

CREATE INDEX IF NOT EXISTS idx_chunks_vec1024
  ON chunks USING HNSW ("vec1024" vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

CREATE INDEX IF NOT EXISTS idx_chunks_vec1536
  ON chunks USING HNSW ("vec1536" vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

-- halfvec braucht halfvec_cosine_ops
CREATE INDEX IF NOT EXISTS idx_chunks_vec3072
  ON chunks USING HNSW ("vec3072" halfvec_cosine_ops)
  WITH (m = 16, ef_construction = 64);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions