From 3326291f7e6c6b4452ca6aa4fc65faf1bd821220 Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Mon, 5 Jun 2017 13:46:42 +0200
Subject: [PATCH] Remove obsolete stages/build before adding foreign keys

---
 ...08_create_foreign_keys_for_pipeline_stages.rb | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/db/post_migrate/20170526190708_create_foreign_keys_for_pipeline_stages.rb b/db/post_migrate/20170526190708_create_foreign_keys_for_pipeline_stages.rb
index 40060d12d74..8a01de1fce6 100644
--- a/db/post_migrate/20170526190708_create_foreign_keys_for_pipeline_stages.rb
+++ b/db/post_migrate/20170526190708_create_foreign_keys_for_pipeline_stages.rb
@@ -6,6 +6,22 @@ class CreateForeignKeysForPipelineStages < ActiveRecord::Migration
   disable_ddl_transaction!
 
   def up
+    execute <<~SQL
+      DELETE FROM ci_stages
+        WHERE NOT EXISTS (
+          SELECT true FROM projects
+            WHERE projects.id = ci_stages.project_id
+        )
+    SQL
+
+    execute <<~SQL
+      DELETE FROM ci_builds
+        WHERE NOT EXISTS (
+          SELECT true FROM ci_stages
+            WHERE ci_stages.id = ci_builds.stage_id
+        )
+    SQL
+
     add_concurrent_foreign_key :ci_stages, :projects, column: :project_id, on_delete: :cascade
     add_concurrent_foreign_key :ci_builds, :ci_stages, column: :stage_id, on_delete: :cascade
   end
-- 
2.30.9