Skip to content

Dataconnect schema deploy: Index names #8798

Open
@federicobaiocco

Description

@federicobaiocco

[REQUIRED] Environment info

firebase-tools: 14.0.9

Platform: Macos

[REQUIRED] Test case

Consider the following schema:

type SomeVeryLongEntityConfiguration @table(key: ["relatedEntity"]) {
  relatedEntity: AnotherEntity!
  fieldA: String!
  fieldB: String!
}

And another related type:

type SomeVeryLongEntityConfCredential @table(key: ["someVeryLongEntityConfiguration", "credentialType"]) {
  someVeryLongEntityConfiguration: SomeVeryLongEntityConfiguration! @ref(constraintName: "long_conf_cred_fk")
  credentialType: String!
}

Firebase Data Connect auto-generates an index to support this relationship.
The index name includes both the table name and the foreign key fields, resulting in something like:

CREATE INDEX someverylongentityconfcredential_someverylongentityconfigurationRelate_idx ...

This index name has more than 63 characters, so PostgreSQL silently truncates it to:

someverylongentityconfcredential_someverylongentityconfigurationRel

Later, when running a deployment (firebase deploy), Firebase generates SQL trying to drop or recreate the full index name:

DROP INDEX "public"."someverylongentityconfcredential_someverylongentityconfigurationRelate_idx";

But postregs had previously truncated the name, so the original index doesn't exist under that name.
This causes a misleading error:

Error: the database schema must be migrated before the application schema can be updated

[REQUIRED] Steps to reproduce

Create schema with long names and deploy

[REQUIRED] Expected behavior

Fail if the index name is too long. Avoid inconsistent state where indexes are deployed with truncated names

[REQUIRED] Actual behavior

The schema is deployed and after that you cannot deploy anymore. We had to manually delete tables, indexes, then update our schema and deploy again.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions