Closed YidiDev closed 1 month ago
The issue has been automatically marked as stale as it missing playground pull request link, which is important to help others understand your issue effectively and make sure the issue hasn't been fixed on latest master, checkout https://github.com/go-gorm/playground for details. it will be closed in 30 days if no further activity occurs. if you are asking question, please use the Question
template, most likely your question already answered https://github.com/go-gorm/gorm/issues or described in the document https://gorm.io ✨ Search Before Asking ✨
GORM Playground Link
Note: I attempted to create a GORM Playground Pull Request to reproduce this issue, but I encountered issues with the playground not functioning correctly. Therefore, I'm including a minimal reproducible example in this issue.
Description
Summary:
When modifying a check constraint on a model field and running
AutoMigrate
, GORM does not update the existing check constraint in the database if a constraint with the same name already exists. This issue is observed with SQLite and may affect other database dialects as well.Steps to Reproduce:
Set up the initial model with a check constraint and run
AutoMigrate
:Modify the check constraint in the model and run
AutoMigrate
again:Attempt to insert data that violates the new constraint but satisfies the old one:
Observe the Output:
This indicates that the check constraint was not updated in the database after modifying the model and running
AutoMigrate
again.Expected Behavior:
AutoMigrate
, the existing constraint in the database should be updated to reflect the changes in the model.Actual Behavior:
Possible Cause:
AutoMigrate
function checks for the existence of constraints by name and skips creation if the constraint exists, without verifying if the constraint definition has changed.Environment:
v1.25.12
go 1.23.0
gorm.io/driver/sqlite
but I was able to reproduce the same problem in postgres (I didn't try with other dialects but imagine the same issue exists)Additional Context:
Workaround:
As a temporary workaround, manually drop the existing constraint before running
AutoMigrate
:This forces the constraint to be recreated with the updated definition.
Possible Solution:
AutoMigrate
logic to drop existing constraints with the same name before creating new ones.Note on GORM Playground:
I attempted to create a GORM Playground Pull Request to reproduce this issue as per the contribution guidelines, but I encountered issues with the playground not functioning correctly. It seems there might be problems with the playground at the moment, so I was unable to use it to demonstrate the issue. Therefore, I have included a minimal reproducible example directly in this issue.