Add --skip-db-creation option to allow migrations without CREATE DATABASE permissions #35
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
--skip-db-creationflag to enable running migrations on pre-existing databases without CREATE DATABASE permissionsProblem
When granting database users (e.g., analysts) permission to run migrations on their dedicated databases, they may not have
CREATE DATABASEprivileges for security reasons. The current implementation always attempts to runCREATE DATABASE IF NOT EXISTS, which fails even when the database already exists and was pre-created by administrators.Solution
Added a new
--skip-db-creationflag (and correspondingCH_MIGRATIONS_SKIP_DB_CREATIONenvironment variable) that skips the database creation step, allowing users to run migrations on existing databases without requiring CREATE DATABASE permissions.Use Case
This enables scenarios where:
Changes
--skip-db-creationCLI option andCH_MIGRATIONS_SKIP_DB_CREATIONenvironment variablemigration()function to conditionally skipcreate_db()when flag is setExample Usage
```bash
clickhouse-migrations migrate
--host=http://localhost:8123
--user=analyst
--password='***'
--db=analytics
--migrations-home=/path/to/migrations
--skip-db-creation
```