diff --git a/internal/plan/rewrite.go b/internal/plan/rewrite.go index 6549b053..a32185ae 100644 --- a/internal/plan/rewrite.go +++ b/internal/plan/rewrite.go @@ -293,6 +293,10 @@ func generateColumnNotNullRewrite(_ *diff.ColumnDiff, path string) []RewriteStep setNotNullSQL := fmt.Sprintf("ALTER TABLE %s ALTER COLUMN %s SET NOT NULL;", tableName, column) + // Step 4: Drop CHECK constraint + dropConstraintSQL := fmt.Sprintf("ALTER TABLE %s DROP CONSTRAINT %s;", + tableName, ir.QuoteIdentifier(constraintName)) + return []RewriteStep{ { SQL: addConstraintSQL, @@ -306,6 +310,10 @@ func generateColumnNotNullRewrite(_ *diff.ColumnDiff, path string) []RewriteStep SQL: setNotNullSQL, CanRunInTransaction: true, }, + { + SQL: dropConstraintSQL, + CanRunInTransaction: true, + }, } } diff --git a/testdata/diff/online/add_not_null/plan.json b/testdata/diff/online/add_not_null/plan.json index 4d06b467..ad75e5d2 100644 --- a/testdata/diff/online/add_not_null/plan.json +++ b/testdata/diff/online/add_not_null/plan.json @@ -25,6 +25,12 @@ "type": "table.column", "operation": "alter", "path": "public.users.email" + }, + { + "sql": "ALTER TABLE users DROP CONSTRAINT email_not_null;", + "type": "table.column", + "operation": "alter", + "path": "public.users.email" } ] } diff --git a/testdata/diff/online/add_not_null/plan.sql b/testdata/diff/online/add_not_null/plan.sql index 582bb35c..5429fe86 100644 --- a/testdata/diff/online/add_not_null/plan.sql +++ b/testdata/diff/online/add_not_null/plan.sql @@ -3,3 +3,5 @@ ALTER TABLE users ADD CONSTRAINT email_not_null CHECK (email IS NOT NULL) NOT VA ALTER TABLE users VALIDATE CONSTRAINT email_not_null; ALTER TABLE users ALTER COLUMN email SET NOT NULL; + +ALTER TABLE users DROP CONSTRAINT email_not_null; diff --git a/testdata/diff/online/add_not_null/plan.txt b/testdata/diff/online/add_not_null/plan.txt index 828240a3..7e8e867b 100644 --- a/testdata/diff/online/add_not_null/plan.txt +++ b/testdata/diff/online/add_not_null/plan.txt @@ -15,3 +15,5 @@ ALTER TABLE users ADD CONSTRAINT email_not_null CHECK (email IS NOT NULL) NOT VA ALTER TABLE users VALIDATE CONSTRAINT email_not_null; ALTER TABLE users ALTER COLUMN email SET NOT NULL; + +ALTER TABLE users DROP CONSTRAINT email_not_null;