windmill-labs/windmill · error
A data table called ${name} was created while this setup was
Error message
A data table called ${name} was created while this setup was running. Choose another name and try again. What it means
During the data-table setup wizard, writeRow claims a data table name and then writes the database config. If between the pre-flight check and the write another admin created a data table with the same name (the claim no longer verifies as ours), the setup aborts with this error instead of silently repointing someone else's table at a database they never chose.
Source
Thrown at frontend/src/lib/components/workspaceSettings/addDataTableModel.ts:431
* Adds the data table to the workspace config, once everything it points at exists.
* `edit_datatable_config` replaces the whole map, so the rest is read back and sent with
* it. Re-runnable: a second attempt overwrites the entry it wrote.
*/
async function writeRow(
deps: RunDeps,
claims: Claims,
name: string,
database: { resource_type: 'postgresql' | 'instance'; resource_path: string }
): Promise<Claims> {
const settings = await WorkspaceService.getSettings({ workspace: deps.workspace })
const datatables: Record<string, any> = { ...(settings.datatable?.datatables ?? {}) }
// Free when the pre-flight looked, taken by the time we write: repointing it here would
// silently hand another admin's data table a database they never chose.
if (
datatables[name] &&
!stillOurs(claims, 'row', name, datatables[name]?.database?.resource_path)
) {
throw new Error(
`A data table called ${name} was created while this setup was running. Choose another name and try again.`
)
}
datatables[name] = { ...(datatables[name] ?? {}), database }
await WorkspaceService.editDataTableConfig({
workspace: deps.workspace,
requestBody: { settings: { datatables }, renames: [], deleted_datatables: [] }
})
return claim(claims, 'row', name, database.resource_path)
}
/**
* `removed` — the row this run wrote is gone. `kept` — the undo could not reach the server, so
* it is still there and the caller has to keep saying so. `foreign` — the name now points
* somewhere this run never wrote, so there is nothing of ours to take back.
*/
type Rollback = 'removed' | 'kept' | 'foreign'
View on GitHub (pinned to e474e8803c)
Solutions
- Choose a different data table name and rerun the setup, as the message instructs
- Coordinate with the other admin so only one setup runs at a time
- Refresh the workspace settings page to pick up the newly created table — it may already be configured as intended
Defensive patterns
Strategy: retry
Validate before calling
// before writing, confirm the name is still free/ours
const tables = await WorkspaceService.getDataTableConfig({ workspace })
if (tables[name] && !isOurClaim) console.warn(`Data table '${name}' already exists — pick another name`) Try / catch
try {
await runSetup(...)
} catch (e) {
if (String(e.message).startsWith('A data table called')) {
// surface UI prompt to choose a new table name, then retry setup
}
} Prevention
- Run workspace setup wizards one admin at a time
- Use table names prefixed with your project/team to reduce collisions
- Re-open a stale setup tab freshly before resuming an interrupted setup
When it happens
Trigger: Two admins run the add-data-table setup concurrently with the same table name; the first completes and creates the table, the second's stillOurs() claim check fails right before WorkspaceService.editDataTableConfig runs.
Common situations: Concurrent workspace configuration by multiple admins; rerunning a stale setup wizard tab after someone else already finished the same setup.
Related errors
- A variable was created at ${path} while this setup was runni
- A resource was created at ${path} while this setup was runni
- The tool list for ${path} changed while it was loading. Try
- ${drawerConfigs[request.key].label} drawer is not ready
- A ${existing.resource_type} resource already exists at ${pat
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/7d6bd7e21d04ee08.
Report an issue: GitHub.