Provides methods for building database schema.

Constructors

  • Parameters

    Returns SchemaModule

Properties

#private: any

Methods

  • Alter a table.

    Examples

    await db.schema
    .alterTable('person')
    .alterColumn('first_name', (ac) => ac.setDataType('text'))
    .execute()

    Parameters

    • table: string

    Returns AlterTableBuilder

  • Create a new index.

    Examples

    await db.schema
    .createIndex('person_full_name_unique_index')
    .on('person')
    .columns(['first_name', 'last_name'])
    .execute()

    Parameters

    • indexName: string

    Returns CreateIndexBuilder<never>

  • Create a new schema.

    Examples

    await db.schema
    .createSchema('some_schema')
    .execute()

    Parameters

    • schema: string

    Returns CreateSchemaBuilder

  • Create a new table.

    Examples

    This example creates a new table with columns id, first_name, last_name and gender:

    await db.schema
    .createTable('person')
    .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
    .addColumn('first_name', 'varchar', col => col.notNull())
    .addColumn('last_name', 'varchar', col => col.notNull())
    .addColumn('gender', 'varchar')
    .execute()

    This example creates a table with a foreign key. Not all database engines support column-level foreign key constraint definitions. For example if you are using MySQL 5.X see the next example after this one.

    await db.schema
    .createTable('pet')
    .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
    .addColumn('owner_id', 'integer', col => col
    .references('person.id')
    .onDelete('cascade')
    )
    .execute()

    This example adds a foreign key constraint for a columns just like the previous example, but using a table-level statement. On MySQL 5.X you need to define foreign key constraints like this:

    await db.schema
    .createTable('pet')
    .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
    .addColumn('owner_id', 'integer')
    .addForeignKeyConstraint(
    'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
    (constraint) => constraint.onDelete('cascade')
    )
    .execute()

    Type Parameters

    • TB extends string

    Parameters

    Returns CreateTableBuilder<TB, never>

  • Create a new type.

    Only some dialects like PostgreSQL have user-defined types.

    Examples

    await db.schema
    .createType('species')
    .asEnum(['dog', 'cat', 'frog'])
    .execute()

    Parameters

    • typeName: string

    Returns CreateTypeBuilder

  • Create a new view.

    Examples

    await db.schema
    .createView('dogs')
    .orReplace()
    .as(db.selectFrom('pet').selectAll().where('species', '=', 'dog'))
    .execute()

    Parameters

    • viewName: string

    Returns CreateViewBuilder

  • Drop an index.

    Examples

    await db.schema
    .dropIndex('person_full_name_unique_index')
    .execute()

    Parameters

    • indexName: string

    Returns DropIndexBuilder

  • Drop a schema.

    Examples

    await db.schema
    .dropSchema('some_schema')
    .execute()

    Parameters

    • schema: string

    Returns DropSchemaBuilder

  • Drop a table.

    Examples

    await db.schema
    .dropTable('person')
    .execute()

    Parameters

    • table: string

    Returns DropTableBuilder

  • Drop a type.

    Only some dialects like PostgreSQL have user-defined types.

    Examples

    await db.schema
    .dropType('species')
    .ifExists()
    .execute()

    Parameters

    • typeName: string

    Returns DropTypeBuilder

  • Drop a view.

    Examples

    await db.schema
    .dropView('dogs')
    .ifExists()
    .execute()

    Parameters

    • viewName: string

    Returns DropViewBuilder

  • Returns a copy of this schema module with the given plugin installed.

    Parameters

    Returns SchemaModule

  • Returns a copy of this schema module without any plugins.

    Returns SchemaModule