Upgrade to 16.5: Migration DropColumnsFromGeoNodeStatusTable fails because columns do not exist

Similar to #426066 (closed):

On update from 16.4 to 16.5: PG::UndefinedColumn: ERROR: column "wikis_retrying_verification_count" of relation "geo_node_statuses" does not exist.

Log
rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash_hide_env[migrate gitlab-rails database] (gitlab::database_migrations line 20) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  ----
STDOUT: Running db:migrate rake task
main: == [advisory_lock_connection] object_id: 118660, pg_backend_pid: 1013923
main: == 20230918084159 DropColumnsFromGeoNodeStatusTable: migrating ================
main: -- remove_columns(:geo_node_statuses, :wikis_checksum_failed_count, :wikis_checksum_mismatch_count, :wikis_checksummed_count, :wikis_failed_count, :wikis_retrying_verification_count, :wikis_synced_count, :wikis_verification_failed_count, :wikis_verified_count, :design_repositories_count, :design_repositories_synced_count, :design_repositories_failed_count, :design_repositories_registry_count)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::UndefinedColumn: ERROR:  column "wikis_retrying_verification_count" of relation "geo_node_statuses" does not exist
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20230918084159_drop_columns_from_geo_node_status_table.rb:7:in `up'
...

I fixed 20230918084159_drop_columns_from_geo_node_status_table.rb like this:

```diff
--- 20230918084159_drop_columns_from_geo_node_status_table.rb.orig	2023-10-20 11:42:07.000000000 +0200
+++ 20230918084159_drop_columns_from_geo_node_status_table.rb	2023-10-23 08:04:05.127384769 +0200
@@ -4,8 +4,7 @@
   enable_lock_retries!
 
   def up
-    remove_columns :geo_node_statuses,
-      :wikis_checksum_failed_count,
+      [:wikis_checksum_failed_count,
       :wikis_checksum_mismatch_count,
       :wikis_checksummed_count,
       :wikis_failed_count,
@@ -16,7 +15,11 @@
       :design_repositories_count,
       :design_repositories_synced_count,
       :design_repositories_failed_count,
-      :design_repositories_registry_count
+      :design_repositories_registry_count].each do |column_name|
+        next unless column_exists?(:geo_node_statuses, column_name)
+
+        remove_column :geo_node_statuses, column_name
+      end
   end
 
   def down

... so it looks like this:

  def up
      [:wikis_checksum_failed_count,
      :wikis_checksum_mismatch_count,
      :wikis_checksummed_count,
      :wikis_failed_count,
      :wikis_retrying_verification_count,
      :wikis_synced_count,
      :wikis_verification_failed_count,
      :wikis_verified_count,
      :design_repositories_count,
      :design_repositories_synced_count,
      :design_repositories_failed_count,
      :design_repositories_registry_count].each do |column_name|
        next unless column_exists?(:geo_node_statuses, column_name)

        remove_column :geo_node_statuses, column_name
      end
  end
Edited by Markus Doits