nocodb/nocodb · warning · Error

SchemaList : Not supported for sqlite

Error message

SchemaList : Not supported for sqlite

What it means

Thrown unconditionally by SqliteClient.schemaList. SQLite is a single-database, schema-less engine — it has no concept of separate schemas within a database file. The method is implemented only to satisfy the shared SqlClient interface contract; calling it always throws. The code after the throw (log + return result) is dead — unreachable.

Source

Thrown at packages/nocodb/src/db/sql-client/lib/sqlite/SqliteClient.ts:333

        }
      }

      //result.data.list = response;
    } catch (e) {
      log.ppe(e, _func);
      throw e;
    }

    log.api(`${_func}: result`, result);
    return result;
  }

  async schemaList(args: any = {}) {
    const _func = this.schemaList.name;
    const result = new Result();
    log.api(`${_func}:args:`, args);

    throw new Error('SchemaList : Not supported for sqlite');

    log.api(`${_func}: result`, result);
    return result;
  }

  /**
   *
   * @param {Object} - args - Input arguments
   * @param {Object} - args.tn -
   * @returns {Object[]} - columns
   * @property {String} - columns[].tn
   * @property {String} - columns[].cn
   * @property {String} - columns[].dt
   * @property {String} - columns[].dtx
   * @property {String} - columns[].np
   * @property {String} - columns[].ns -
   * @property {String} - columns[].clen -
   * @property {String} - columns[].dp -

View on GitHub (pinned to d3caaf4e89)

Solutions

  1. Guard callers: check the client type and skip schemaList for sqlite3 before invoking it.
  2. If schema enumeration is needed, treat SQLite as having a single implicit schema rather than calling this method.

Example fix

// before
const schemas = await sqlClient.schemaList();
// after
const schemas = sqlClient.clientType === 'sqlite3' ? [{ name: 'main' }] : await sqlClient.schemaList();
Defensive patterns

Strategy: validation

Validate before calling

async function safeSchemaList(sqlClient: any) {
  if (sqlClient.clientType === 'sqlite3') {
    return [{ schema_name: 'main' }]; // SQLite has a single implicit schema
  }
  return sqlClient.schemaList();
}

Type guard

function isSqliteClient(sqlClient: any): boolean {
  return sqlClient?.clientType === 'sqlite3';
}

Try / catch

try {
  const schemas = await sqlClient.schemaList();
} catch (e) {
  if (e.message === 'SchemaList : Not supported for sqlite') {
    return [{ schema_name: 'main' }];
  }
  throw e;
}

Prevention

When it happens

Trigger: Any code path that calls schemaList() on a SqliteClient instance: schema introspection UI, migration tooling, or sync logic that iterates databases and calls schemaList uniformly across client types without checking the dialect.

Common situations: A workspace configured with SQLite that triggers a generic schema-listing flow designed for PostgreSQL/MySQL; tooling that does not short-circuit SQLite before calling schemaList.

Related errors


AI-assisted analysis of nocodb/nocodb@d3caaf4e89 (2026-08-12). Data as JSON: /api/errors/3b5d52e2d50a8813. Report an issue: GitHub.