Skip to content

fix(db): make seed-db script idempotent by cleaning up FK dependencies#2383

Merged
tvi merged 1 commit intomainfrom
t/seed-db
Apr 14, 2026
Merged

fix(db): make seed-db script idempotent by cleaning up FK dependencies#2383
tvi merged 1 commit intomainfrom
t/seed-db

Conversation

@tvi
Copy link
Copy Markdown
Contributor

@tvi tvi commented Apr 13, 2026

The seed script failed on repeated runs with a foreign key violation:
"envs_teams_envs" on table "envs" (SQLSTATE 23503)

This happened because DELETE FROM teams was attempted while rows in envs, snapshots, and volumes still referenced the team via ON DELETE NO ACTION constraints. Similarly, deleting auth.users could be blocked by addons.added_by (also ON DELETE NO ACTION).

Fix the deletion order to explicitly remove blocking child rows before deleting the parent team and user:

  1. DELETE envs for the team
  2. DELETE snapshots for the team
  3. DELETE volumes for the team
  4. DELETE addons for the user
  5. DELETE teams (team_api_keys, users_teams cascade automatically)
  6. DELETE auth.users (access_tokens cascade automatically)
  7. Re-create user, team, and associated credentials

Tables with ON DELETE CASCADE/SET NULL (team_api_keys, users_teams, access_tokens, env_aliases, env_builds, etc.) are cleaned up automatically and do not need explicit deletes.

@tvi tvi enabled auto-merge (squash) April 13, 2026 23:36
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4d4c252b7f

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread packages/db/scripts/seed/postgres/seed-db.go
Comment thread packages/db/scripts/seed/postgres/seed-db.go
Comment thread packages/db/scripts/seed/postgres/seed-db.go
@tvi tvi disabled auto-merge April 13, 2026 23:48
The seed script failed on repeated runs with a foreign key violation:
  "envs_teams_envs" on table "envs" (SQLSTATE 23503)

This happened because DELETE FROM teams was attempted while rows in
envs, snapshots, and volumes still referenced the team via ON DELETE
NO ACTION constraints. Similarly, deleting auth.users could be blocked
by addons.added_by (also ON DELETE NO ACTION).

Fix the deletion order to explicitly remove blocking child rows before
deleting the parent team and user:
  1. DELETE envs for the team
  2. DELETE snapshots for the team
  3. DELETE volumes for the team
  4. DELETE addons for the user
  5. DELETE teams (team_api_keys, users_teams cascade automatically)
  6. DELETE auth.users (access_tokens cascade automatically)
  7. Re-create user, team, and associated credentials

Tables with ON DELETE CASCADE/SET NULL (team_api_keys, users_teams,
access_tokens, env_aliases, env_builds, etc.) are cleaned up
automatically and do not need explicit deletes.

Additionally, inserting into auth.users fires a trigger chain
(sync_inserts_to_public_users -> post_user_signup) that auto-creates
a default team. Delete that trigger-created team before inserting the
seed team to avoid leaving duplicate teams for the same user.
@tvi tvi merged commit 10e4f50 into main Apr 14, 2026
44 checks passed
@tvi tvi deleted the t/seed-db branch April 14, 2026 00:04
ValentaTomas pushed a commit that referenced this pull request May 4, 2026
#2383)

The seed script failed on repeated runs with a foreign key violation:
  "envs_teams_envs" on table "envs" (SQLSTATE 23503)

This happened because DELETE FROM teams was attempted while rows in
envs, snapshots, and volumes still referenced the team via ON DELETE
NO ACTION constraints. Similarly, deleting auth.users could be blocked
by addons.added_by (also ON DELETE NO ACTION).

Fix the deletion order to explicitly remove blocking child rows before
deleting the parent team and user:
  1. DELETE envs for the team
  2. DELETE snapshots for the team
  3. DELETE volumes for the team
  4. DELETE addons for the user
  5. DELETE teams (team_api_keys, users_teams cascade automatically)
  6. DELETE auth.users (access_tokens cascade automatically)
  7. Re-create user, team, and associated credentials

Tables with ON DELETE CASCADE/SET NULL (team_api_keys, users_teams,
access_tokens, env_aliases, env_builds, etc.) are cleaned up
automatically and do not need explicit deletes.

Additionally, inserting into auth.users fires a trigger chain
(sync_inserts_to_public_users -> post_user_signup) that auto-creates
a default team. Delete that trigger-created team before inserting the
seed team to avoid leaving duplicate teams for the same user.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants