From 51c727e8d50014e50e2f82f041988b41f9d1392e Mon Sep 17 00:00:00 2001 From: Sam Mosleh <41725025+sam-mosleh@users.noreply.github.com> Date: Tue, 18 Nov 2025 14:31:00 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=90=9B=20Fix=20adding=20new=20NOT=20N?= =?UTF-8?q?ULL=20constraint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/plan/rewrite.go | 8 ++++++++ 1 file changed, 8 insertions(+) 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, + }, } } From c97394fc5b2db39512d2ef4147bb80afcd4cc788 Mon Sep 17 00:00:00 2001 From: Sam Mosleh Date: Tue, 18 Nov 2025 14:46:59 +0400 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9C=85=20Update=20add=5Fnot=5Fnull=20tes?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testdata/diff/online/add_not_null/plan.json | 6 ++++++ testdata/diff/online/add_not_null/plan.sql | 2 ++ testdata/diff/online/add_not_null/plan.txt | 2 ++ 3 files changed, 10 insertions(+) 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;