Skip to content

Re-add template column to services table

Stan Hu requested to merge sh-re-add-template-column into master

We attempted to revert the rename of the template to instance column in the services table in !24857 (merged) and !24885 (merged), but for some installations (e.g. staging), the template column had been dropped already because post-deploy migrations had finished.

We never actually shipped this change to production, but for these environments we need to re-add the template column back into the table or project creation will fail.

Note we do not do a data migration (e.g. set the template column to true for rows that have a NULL project_id) for two reasons:

  1. We don't want to insert a template by accident.
  2. This rename only finished on development/staging environments.

Note that this migration happens in a post-deploy migration to ensure 20200211152410_remove_instance_from_services.rb gets a chance to undo the migration first.

Migration output

When migrations from !23595 (merged) did run

From the !23595 (merged):

== 20200123092602 RenameServicesTemplateToInstance: migrating =================
-- transaction_open?()
   -> 0.0000s
-- columns(:services)
   -> 0.0018s
-- add_column(:services, :instance, :boolean, {:limit=>nil, :precision=>nil, :scale=>nil})
   -> 0.0050s
-- change_column_default(:services, :instance, "false")
   -> 0.0031s
-- transaction_open?()
   -> 0.0000s
-- exec_query("SELECT COUNT(*) AS count FROM \"services\"")
   -> 0.0008s
-- indexes(:services)
   -> 0.0025s
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:services, ["instance"], {:unique=>false, :name=>"index_services_on_instance", :length=>{}, :order=>{}, :using=>:btree, :algorithm=>:concurrently})
   -> 0.0016s
-- execute("SET statement_timeout TO 0")
   -> 0.0005s
-- add_index(:services, ["instance"], {:unique=>false, :name=>"index_services_on_instance", :length=>{}, :order=>{}, :using=>:btree, :algorithm=>:concurrently})
   -> 0.0066s
-- execute("RESET ALL")
   -> 0.0004s
-- foreign_keys(:services)
   -> 0.0023s
-- quote_table_name(:services)
   -> 0.0000s
-- quote_column_name(:template)
   -> 0.0000s
-- quote_column_name(:instance)
   -> 0.0000s
-- execute("CREATE OR REPLACE FUNCTION trigger_27489c1cdc22()\nRETURNS trigger AS\n$BODY$\nBEGIN\n  NEW.\"instance\" := NEW.\"template\";\n  RETURN NEW;\nEND;\n$BODY$\nLANGUAGE 'plpgsql'\nVOLATILE\n")
   -> 0.0025s
-- execute("DROP TRIGGER IF EXISTS trigger_27489c1cdc22\nON \"services\"\n")
NOTICE:  trigger "trigger_27489c1cdc22" for relation "services" does not exist, skipping
   -> 0.0005s
-- execute("CREATE TRIGGER trigger_27489c1cdc22\nBEFORE INSERT OR UPDATE\nON \"services\"\nFOR EACH ROW\nEXECUTE PROCEDURE trigger_27489c1cdc22()\n")
   -> 0.0018s
== 20200123092602 RenameServicesTemplateToInstance: migrated (0.0319s) ========

== 20200123101859 CleanupRenameServicesTemplateToInstance: migrating ==========
-- execute("DROP TRIGGER IF EXISTS trigger_27489c1cdc22 ON services")
   -> 0.0023s
-- execute("DROP FUNCTION IF EXISTS trigger_27489c1cdc22()")
   -> 0.0020s
-- remove_column(:services, :template)
   -> 0.0030s
== 20200123101859 CleanupRenameServicesTemplateToInstance: migrated (0.0086s) =

This MR:

== 20200212052620 ReaddTemplateColumnToServices: migrating ====================
-- column_exists?(:services, :template)
   -> 0.0021s
-- transaction_open?()
   -> 0.0000s
-- execute("SET statement_timeout TO 0")
   -> 0.0006s
-- transaction()
-- add_column(:services, :template, :boolean, {:default=>nil})
   -> 0.0019s
-- change_column_default(:services, :template, false)
   -> 0.0031s
   -> 0.0075s
-- columns(:services)
   -> 0.0021s
-- transaction_open?()
   -> 0.0000s
-- exec_query("SELECT COUNT(*) AS count FROM \"services\"")
   -> 0.0012s
-- execute("RESET ALL")
   -> 0.0007s
== 20200212052620 ReaddTemplateColumnToServices: migrated (0.0149s) ===========

When only normal migation from !23595 (merged) did run (not post-deploy)

From !23595 (merged):

== 20200123092602 RenameServicesTemplateToInstance: migrating =================
-- transaction_open?()
   -> 0.0000s
-- columns(:services)
   -> 0.0017s
-- add_column(:services, :instance, :boolean, {:limit=>nil, :precision=>nil, :scale=>nil})
   -> 0.0051s
-- change_column_default(:services, :instance, "false")
   -> 0.0031s
-- transaction_open?()
   -> 0.0000s
-- exec_query("SELECT COUNT(*) AS count FROM \"services\"")
   -> 0.0009s
-- indexes(:services)
   -> 0.0025s
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:services, ["instance"], {:unique=>false, :name=>"index_services_on_instance", :length=>{}, :order=>{}, :using=>:btree, :algorithm=>:concurrently})
   -> 0.0017s
-- execute("SET statement_timeout TO 0")
   -> 0.0005s
-- add_index(:services, ["instance"], {:unique=>false, :name=>"index_services_on_instance", :length=>{}, :order=>{}, :using=>:btree, :algorithm=>:concurrently})
   -> 0.0088s
-- execute("RESET ALL")
   -> 0.0017s
-- foreign_keys(:services)
   -> 0.0086s
-- quote_table_name(:services)
   -> 0.0000s
-- quote_column_name(:template)
   -> 0.0000s
-- quote_column_name(:instance)
   -> 0.0000s
-- execute("CREATE OR REPLACE FUNCTION trigger_27489c1cdc22()\nRETURNS trigger AS\n$BODY$\nBEGIN\n  NEW.\"instance\" := NEW.\"template\";\n  RETURN NEW;\nEND;\n$BODY$\nLANGUAGE 'plpgsql'\nVOLATILE\n")
   -> 0.0070s
-- execute("DROP TRIGGER IF EXISTS trigger_27489c1cdc22\nON \"services\"\n")
NOTICE:  trigger "trigger_27489c1cdc22" for relation "services" does not exist, skipping
   -> 0.0025s
-- execute("CREATE TRIGGER trigger_27489c1cdc22\nBEFORE INSERT OR UPDATE\nON \"services\"\nFOR EACH ROW\nEXECUTE PROCEDURE trigger_27489c1cdc22()\n")
   -> 0.0043s
== 20200123092602 RenameServicesTemplateToInstance: migrated (0.0516s) ========

This MR:

== 20200212052620 ReaddTemplateColumnToServices: migrating ====================
-- column_exists?(:services, :template)
   -> 0.0051s
== 20200212052620 ReaddTemplateColumnToServices: migrated (0.0053s) ===========

When no migrations from !23595 (merged) did run

This MR:

== 20200212052620 ReaddTemplateColumnToServices: migrating ====================
-- column_exists?(:services, :template)
   -> 0.0018s
== 20200212052620 ReaddTemplateColumnToServices: migrated (0.0018s) ===========
Edited by Toon Claes

Merge request reports