Budibase/budibase · error · Error

Datasource is not configured fully.

Error message

Datasource is not configured fully.

What it means

getExternalTablesInDatasource loads the datasource document with enriched entities (tables extracted by the connector). If the datasource doesn't exist or its entities were never fetched/attached, the datasource is unusable for table operations, so it throws.

Source

Thrown at packages/server/src/sdk/workspace/tables/getters.ts:272

    const [internal, external] = await Promise.all([
      getAllInternalTables(),
      getAllExternalTables(),
    ])
    span.addTags({
      numInternalTables: internal.length,
      numExternalTables: external.length,
    })
    return await processTables([...internal, ...external])
  })
}

export async function getExternalTablesInDatasource(
  datasourceId: string
): Promise<Record<string, Table>> {
  return await tracer.trace("getExternalTablesInDatasource", async span => {
    const datasource = await datasources.get(datasourceId, { enriched: true })
    if (!datasource || !datasource.entities) {
      throw new Error("Datasource is not configured fully.")
    }
    span.addTags({
      datasourceId,
      numEntities: Object.keys(datasource.entities).length,
    })
    return await processEntities(datasource.entities)
  })
}

export async function getTables(tableIds: string[]): Promise<Table[]> {
  return tracer.trace("getTables", async span => {
    span.addTags({ numTableIds: tableIds.length })
    const externalTableIds = tableIds.filter(tableId =>
        isExternalTableID(tableId)
      ),
      internalTableIds = tableIds.filter(tableId => !isExternalTableID(tableId))
    let tables: Table[] = []
    if (externalTableIds.length) {

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Verify the datasourceId is valid and the datasource document exists
  2. Complete the datasource connection flow so entities are fetched and attached
  3. Check datasource credentials/connectivity and re-sync
  4. Delete and recreate the datasource if its configuration is corrupt

Example fix

// before
await tables.external.getExternalTablesInDatasource(unsyncedDsId)
// after
const ds = await datasources.get(unsyncedDsId)
if (!ds?.entities) {
  await datasources.update({ ...ds, entities: await fetchEntities(ds) })
}
await tables.external.getExternalTablesInDatasource(unsyncedDsId)
Defensive patterns

Strategy: validation

Validate before calling

const ds = await datasources.get(datasourceId, { enriched: true })
if (!ds || !ds.entities) throw new Error("Datasource missing or not synced")

Type guard

function isConfigured(ds: Datasource | undefined): ds is Datasource & { entities: Record<string, Table> } {
  return !!ds && !!ds.entities
}

Try / catch

try {
  const entities = await tables.external.getExternalTablesInDatasource(datasourceId)
} catch (err) {
  if (err.message === "Datasource is not configured fully.") {
    // re-fetch/sync the datasource or recreate it
  }
}

Prevention

When it happens

Trigger: Calling getExternalTablesInDatasource (directly or via getExternalTable) with a datasourceId whose document is missing, deleted, or has no entities — e.g. a datasource created but never fetched/synced, or an app whose datasource config failed.

Common situations: Connecting a datasource without completing the fetch/sync step; datasource deleted while app pages still reference it; invalid credentials preventing entity extraction; environment misconfiguration for the SQL connection.

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/4c0ce118c3371d46. Report an issue: GitHub.