drizzle-kit push cockroach config example
Example drizzle.config.ts for CockroachDB: import { defineConfig } from "drizzle-kit"; export default defineConfig({ dialect: "cockroach", schema: "./src/schema.ts", dbCredentials: { url: "postgresql://user:password@host:port/dbname" } });
drizzle-kit push cockroach schema example
Example CockroachDB schema file: import * as p from "drizzle-orm/cockroach-core"; export const users = p.cockroachTable("users", { id: p.int4().primaryKey(), name: p.string(), });
push syncs schema directly without generating migration files
The push command synchronizes the schema directly with the database schema without needing to generate migration files first. It should only be used for local development and local databases due to its direct nature.
drizzle-kit push CLI options with examples
Example usage: npx drizzle-kit push --explain --verbose --force
drizzle-kit push full working example
Example project structure with drizzle.config.ts: import { defineConfig } from "drizzle-kit"; export default defineConfig({ dialect: "mssql", schema: "./src/schema.ts", dbCredentials: { url: "mssql://user:password@host:port/dbname" } }); And src/schema.ts: import * as p from "drizzle-orm/mssql-core"; export const users = p.mssqlTable("users", { id: p.int().primaryKey().identity(), name: p.nvarchar({ length: 255 }), }); Running npx drizzle-kit push will generate and apply: CREATE TABLE [users] ( [id] int IDENTITY(1, 1), [name] nvarchar(255), CONSTRAINT [users_pkey] PRIMARY KEY([id]) );
drizzle-kit push use cases and benefits
drizzle-kit push is the best approach for rapid prototyping and code-first development. It pairs exceptionally well with blue/green deployment strategy, managed database deployments, and CI/CD workflows. Many teams and solo developers use it successfully as their primary migrations flow in production applications.
drizzle-kit push with config file for MSSQL
Example drizzle.config.ts for MSSQL: import { defineConfig } from "drizzle-kit"; export default defineConfig({ dialect: "mssql", schema: "./src/schema.ts", dbCredentials: { url: "mssql://user:password@host:port/dbname" } }); Then run: npx drizzle-kit push
drizzle-kit push tablesFilter and schemaFilter options
drizzle-kit push manages all tables and schemas by default. You can configure which tables and schemas to manage using: tablesFilter (glob-based table names filter, e.g. ["users", "user_info"] or "user*", default is "*") and schemaFilter (schema names filter, e.g. ["dbo", "drizzle"]).
drizzle-kit push with CLI options
Example using CLI options: npx drizzle-kit push --dialect=mssql --schema=./src/schema.ts --url=mssql://user:password@host:port/dbname
Drizzle Kit push limitations for generated columns
Drizzle Kit has two limitations for the push command with generated columns: (1) You cannot change the generated constraint expression using push; Drizzle-kit will ignore this change. To modify an expression, you must drop the column, push, then add the column with a new expression. This limitation exists because database formatting modifies the schema expression, making it impossible to determine if you changed it or the database did. (2) The generate command has no limitations.
Codebase first approach with drizzle-kit push
In this approach, the TypeScript Drizzle schema is the source of truth under version control. Use drizzle-kit push to apply schema changes directly to the database without generating SQL migration files. Drizzle pulls the current database schema, generates alterations based on the diff, and applies them. This approach is best for rapid prototyping and has been used in production by teams and solo developers.
Example: Codebase first with drizzle-kit push
Define schema in TypeScript with mssqlTable. Adding a unique() column modifier to a varchar field will trigger drizzle-kit push to generate ALTER TABLE statements. Example schema file: import * as p from "drizzle-orm/mssql-core"; export const users = p.mssqlTable("users", { id: p.int().primaryKey().identity(), name: p.varchar({ length: 255 }), email: p.varchar({ length: 255 }).unique(), });
drizzle-kit push CLI examples
Examples of using drizzle-kit push from the command line:
```shell
npx drizzle-kit push --dialect=singlestore --schema=./src/schema.ts --url=mysql://user:password@host:3306/dbname
npx drizzle-kit push --dialect=singlestore --schema=./src/schema.ts --tablesFilter='user*' --url=mysql://user:password@host:3306/dbname
npx drizzle-kit push --strict --verbose --force
```
drizzle-kit push tablesFilter configuration
The `tablesFilter` option allows you to configure which tables `drizzle-kit push` will manage. It uses glob-based table name filtering, for example `["users", "user_info"]` or `"user*"`. The default is `"*"` which manages all tables.
drizzle-kit push overview
The `drizzle-kit push` command pushes schema and schema changes directly to the database while omitting SQL file generation. It is designed for the code-first approach to Drizzle migrations.
drizzle-kit push workflow
When you run `drizzle-kit push`, it performs four steps: reads through Drizzle schema file(s) and composes a JSON snapshot of the schema, pulls (introspects) the database schema, generates SQL migrations based on differences between the snapshot and database schema, and applies SQL migrations to the database.
drizzle-kit push use cases
The `drizzle-kit push` command is best for rapid prototyping and has been used successfully by dozens of teams and solo developers as a primary migrations flow in production applications. It pairs well with blue/green deployment strategy and serverless databases like Planetscale, Neon, and Turso.
drizzle-kit push config with CLI options
You can run `drizzle-kit push` with all configuration provided via command line: `npx drizzle-kit push --dialect=singlestore --schema=./src/schema.ts --url=mysql://user:password@host:3306/dbname`
drizzle-kit push database driver selection
Drizzle Kit does not come with a pre-bundled database driver. It automatically picks an available SingleStore driver from the current project based on `dialect: "singlestore"`.
drizzle-kit up with config file
To use drizzle-kit up with a config file, define dialect in drizzle.config.ts (e.g., dialect: "singlestore") and run: npx drizzle-kit up
drizzle-kit up with CLI options
To use drizzle-kit up with CLI options, run: npx drizzle-kit up --dialect=singlestore
drizzle-kit up CLI options reference
The drizzle-kit up command accepts the following CLI options: dialect (required, can be postgresql, mysql, sqlite, or singlestore), out (optional, migrations folder path, default=./drizzle), config (optional, configuration file path, default=drizzle.config.ts).
drizzle-kit up CLI examples
Example usage: npx drizzle-kit up --dialect=singlestore or npx drizzle-kit up --dialect=singlestore --out=./migrations-folder
drizzle-kit push command
drizzle-kit push lets you push your Drizzle schema to database either upon initial declaration or on subsequent schema changes.
Migration option 2: Codebase first with drizzle-kit push
When you want to have database schema in your TypeScript codebase without dealing with SQL migration files, use drizzle-kit push to push your schema directly to the database. Your TypeScript Drizzle schema is the source of truth. This approach is suitable for rapid prototyping and has been successfully used by teams and solo developers in production applications.
Push schema changes to Neon database
Run 'npx drizzle-kit push' to apply schema changes to the Neon database. The push command is suitable for quickly testing new schema designs or changes in a local development environment without the overhead of managing migration files.
Drizzle Kit push command for Netlify deployment
Run 'npx drizzle-kit push' to apply schema changes directly to the database. This is suitable for quick testing of new schema designs or changes in development environment without managing migration files.
Push schema changes directly to database
Use npx drizzle-kit push to apply schema changes directly to the database without creating versioned migration files. This is recommended for rapid prototyping in local development but not for production, where the generate + migrate workflow should be used to maintain a versioned history of schema changes.
Push workflow limitations for index field changes
When using `push` workflows in drizzle-kit, changes to the following index fields are not generated automatically: expressions inside .on() and .using(), .where() statements, and operator classes .op() on columns. To change these fields with push: comment out the index, push, uncomment and modify the index, then push again. The `generate` command has no such limitations and will be triggered by any index property changes.
drizzle-kit push extended example
Complete example of drizzle-kit push usage:
Project structure:
```
📦 <project root>
├ 📂 src
│ ├ 📜 schema.ts
│ └ 📜 index.ts
├ 📜 drizzle.config.ts
└ …
```
drizzle.config.ts:
```ts
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "mysql",
schema: "./src/schema.ts",
dbCredentials: {
url: "mysql://user:password@host:3306/dbname"
},
});
```
src/schema.ts:
```ts
import * as p from "drizzle-orm/mysql-core";
export const users = p.mysqlTable("users", {
id: p.int().primaryKey().autoincrement(),
name: p.varchar({ length: 255 }),
})
```
Running `npx drizzle-kit push` generates and applies this SQL:
```sql
CREATE TABLE `users` (
`id` int AUTO_INCREMENT PRIMARY KEY,
`name` varchar(255)
);
```
drizzle-kit push overview and purpose
drizzle-kit push lets you push your schema and subsequent schema changes directly to the database while omitting SQL files generation. It is designed to cover the code-first approach of Drizzle migrations. It reads through Drizzle schema files, composes a JSON snapshot of the schema, pulls (introspects) the database schema, generates SQL migrations based on differences, and applies the migrations to the database. It is the best approach for rapid prototyping and works well with blue/green deployment strategies and serverless databases like Planetscale, Neon, and Turso.
drizzle-kit push required configuration
drizzle-kit push requires you to specify dialect, path to schema file(s), and either database connection url or user:password@host:port/db params. These can be provided via drizzle.config.ts config file or via CLI options.
drizzle-kit push with config file example
Example configuration in drizzle.config.ts:
```ts
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "mysql",
schema: "./src/schema.ts",
dbCredentials: {
url: "mysql://user:password@host:3306/dbname",
},
});
```
Then run: `npx drizzle-kit push`
drizzle-kit push with CLI options example
You can provide all options via CLI without a config file:
`npx drizzle-kit push --dialect=mysql --schema=./src/schema.ts --url=mysql://user:password@host:3306/dbname`
drizzle-kit push schema file paths
You can have a single schema.ts file or multiple schema files spread across the project. Drizzle Kit requires you to specify paths to them as a glob pattern via the schema configuration option.
drizzle-kit push multiple configuration files
You can have multiple config files in one project, useful for multiple database stages, multiple databases, or different databases on the same project. Use the --config flag to specify which config file to use, e.g.: `npx drizzle-kit push --config=drizzle-dev.config.ts` or `npx drizzle-kit push --config=drizzle-prod.config.ts`
drizzle-kit push tablesFilter option
The tablesFilter option is a glob-based table names filter. It specifies which tables drizzle-kit push will manage. drizzle-kit push will manage all MySQL tables by default. Examples: ["users", "user_info"] or "user*". Default is "*".
drizzle-kit push CLI-only options
drizzle-kit push has the following CLI-only options:
- verbose: print all SQL statements prior to execution
- explain: print the planned SQL changes, without applying them (dry run)
- force: auto-accept all data-loss statements
Example: `npx drizzle-kit push --explain --verbose --force`
drizzle-kit push configuration parameters reference
Complete list of configuration parameters for drizzle-kit push:
- dialect (required): Database dialect, one of the supported dialects
- schema (required): Path to typescript schema file(s) or folder(s) with multiple schema files
- tablesFilter (optional): Table name filter
- url (optional): Database connection string
- user (optional): Database user
- password (optional): Database password
- host (optional): Host
- port (optional): Port
- database (optional): Database name
- config (optional): Configuration file path, default=drizzle.config.ts