diff --git a/.changeset/brave-games-drop.md b/.changeset/brave-games-drop.md
new file mode 100644
index 00000000000..7ca47862cb7
--- /dev/null
+++ b/.changeset/brave-games-drop.md
@@ -0,0 +1,5 @@
+---
+"chainlink": major
+---
+
+Fix kv_store migration fk cascade deletion
diff --git a/core/services/job/kv_orm_test.go b/core/services/job/kv_orm_test.go
index 794e27b3c9f..25e503dc381 100644
--- a/core/services/job/kv_orm_test.go
+++ b/core/services/job/kv_orm_test.go
@@ -82,4 +82,6 @@ func TestJobKVStore(t *testing.T) {
 	require.NoError(t, kvStore.Store(key, td2))
 	require.NoError(t, kvStore.Get(key, &retData))
 	require.Equal(t, td2, retData)
+
+	require.NoError(t, jobORM.DeleteJob(jobID))
 }
diff --git a/core/store/migrate/migrations/0229_add_kv_store_job_fk_cascade_delete.sql b/core/store/migrate/migrations/0229_add_kv_store_job_fk_cascade_delete.sql
new file mode 100644
index 00000000000..eb63539fae2
--- /dev/null
+++ b/core/store/migrate/migrations/0229_add_kv_store_job_fk_cascade_delete.sql
@@ -0,0 +1,23 @@
+-- +goose Up
+
+BEGIN;
+
+ALTER TABLE job_kv_store DROP CONSTRAINT job_kv_store_job_id_fkey;
+ALTER TABLE job_kv_store
+    ADD CONSTRAINT job_kv_store_job_id_fkey
+        FOREIGN KEY (job_id)
+            REFERENCES jobs(id)
+            ON DELETE CASCADE;
+
+COMMIT;
+
+-- +goose Down
+BEGIN;
+
+ALTER TABLE job_kv_store DROP CONSTRAINT job_kv_store_job_id_fkey;
+ALTER TABLE job_kv_store
+    ADD CONSTRAINT job_kv_store_job_id_fkey
+        FOREIGN KEY (job_id)
+            REFERENCES jobs(id);
+
+COMMIT;