Comments (5)
I have used Liquibase in the past, but now in a project I am migrating away from it to Kysely. While I understand the benefits of integrity checks, especially at scale, I am against them or, at least, in favor of having the option to ignore or reset the checks. I have the following reasons:
- The integrity checks ensure only integrity between migration scripts and the metadata of scripts that have already run. If someone modifies data or the structure of data directly, you are still out of luck.
- I assume that past scripts are modified intentionally. For example, if database vendors introduce breaking changes and migrations stop working on newer database versions in integration tests. In my current case, I want to switch to Kysely migrations by running an empty migration and then adding the entire structure from a mysqldump to this migration. Such changes can/should/must be verified in a code review anyway.
- During development, I often modify the database structure manually (especially indexes) and then adjust the migration file accordingly. If the migration has already run, which is almost always the case, then I can't down-up to get a consistent state because the checks say
no
. - The checks introduce additional complexity to the code of Kysely.
Therefore, please do not take my reaction to the feature request personally, but as a vote.
from kysely.
I completely agree with @Bessonov!
We could add the check behind an option (off by default) but that would be tricky since we'd have to migrate the migration tables. I don't think there's a way to do that in a way that'd work on all possible dialects (internal and 3rd party). We'd have to add that to the dialects, making them more complex.
from kysely.
I think that a solution could be a checksum system like liquibase
from kysely.
I'm curious what the use case would even be for this? Kysely's value to me as a programmer is to help me avoid unexpected things, but when I change my migration that is absolutely an expected change
from kysely.
IMO these are the most important reasons for having integrity checks on your database migrations.
- Ensuring consistency
Checksums ensure that the migration scripts remain unchanged from development to deployment. Any modifications to the scripts after they have been executed in a given environment will be detected, ensuring that all environments (development, testing, staging, production) remain consistent. I.e. Helps in preventing schema drift if scripts are altered or not applied uniformly.
- Audit trails
Having a reliable checksum system helps maintain an audit trail of all changes applied to the database. This can be crucial for compliance and auditing purposes, as it provides a verifiable history of migrations.
- Collaboration
In a team environment, multiple developers might work on the database schema simultaneously. Checksums help ensure that everyone is working with the same version of the migration scripts, reducing conflicts and integration issues.
- Reliable rollbacks
This is not so important for me personally as I usually prefer forward-only migration model. However, if a migration fails or causes issues, checksums can help ensure that rollbacks are executed correctly by verifying that the scripts being rolled back are the same as the ones initially run.
To summarize, I think it's all about maintaining high standards of database integrity, ensuring reliable deployments and minimizing risks associated with schema changes.
from kysely.
Related Issues (20)
- `eb(ref, op, val)` does not accept `sql` template tag escaped `op` argument. HOT 3
- Incorrect syntax near 'format' HOT 1
- Multi-statement queries causes wrong result interpretation HOT 2
- Kysely mssql dialect support for bun improved HOT 1
- SELECT ARRAY function? HOT 3
- Implement `WITH` for create index HOT 1
- MariaDB (v10) using jsonObjectFrom and jsonArrayFrom HOT 2
- Select columns as NULL or as placeholder HOT 1
- Support table names in UpdateQueryBuilder.returningAll
- orderBy gives an error when a space separated string of sortBy and sortOrder is passed in eg- orderBy('sortBy sortOrder') HOT 2
- Memory issue when inserting lots of records to postgres HOT 1
- Pronunciation help is wrong HOT 3
- QueryCompilerError: Could not serialize value causes Kysely instance to fail later HOT 2
- Feature request: Feedback possibility during Migration HOT 1
- Is there a way to deduplicate parameters in template strings? HOT 1
- Postgres Introspection getTables() misses partition tables
- CamelCasePlugin messes up complex type mappings with setTypeParser HOT 2
- How to handle "empty" column selections? HOT 1
- The type of `eb` in `selectFrom(eb => ...)` is wrong
- RLS via Plugin?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kysely.