Gitlab-ce upgrade to 18 failure on gitlab::database_migrations (relation fork_networks)

(copied from “General” forum, I think this is the correct place to ask this)

When upgrading to gitlab-ce 18 from gitlab-ce=17.11.2-ce.0, database migration process fails with this error:

Recipe: gitlab::database_migrations
  * ruby_block[check remote PG version] action nothing (skipped due to action :nothing)
  * rails_migration[gitlab-rails] action run[2025-05-16T14:29:15+02:00] WARN: gitlab-rails does not have a log_group or default logdir mode defined. Setting to 0700.

    * bash_hide_env[migrate gitlab-rails database] action run
      [execute] rake aborted!
                StandardError: An error has occurred, all later migrations canceled:
                
                PG::NotNullViolation: ERROR:  column "organization_id" of relation "fork_networks" contains null values
                /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20250415124320_add_not_null_to_fork_networks_organization_id.rb:9:in `up'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:33:in `block in exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/query_analyzer.rb:83:in `within'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:30:in `exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/automatic_lock_writes_on_tables.rb:21:in `exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:54:in `ddl_transaction'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/runner_backoff/active_record_mixin.rb:21:in `execute_migration_in_transaction'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/pg_backend_pid.rb:14:in `with_advisory_lock'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:189:in `configure_database'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:156:in `configure_pg_databases'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:102:in `block (3 levels) in <top (required)>'
                /opt/gitlab/embedded/bin/bundle:25:in `load'
                /opt/gitlab/embedded/bin/bundle:25:in `<main>'
                
                Caused by:
                ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR:  column "organization_id" of relation "fork_networks" contains null values
                /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20250415124320_add_not_null_to_fork_networks_organization_id.rb:9:in `up'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:33:in `block in exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/query_analyzer.rb:83:in `within'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:30:in `exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/automatic_lock_writes_on_tables.rb:21:in `exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:54:in `ddl_transaction'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/runner_backoff/active_record_mixin.rb:21:in `execute_migration_in_transaction'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/pg_backend_pid.rb:14:in `with_advisory_lock'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:189:in `configure_database'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:156:in `configure_pg_databases'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:102:in `block (3 levels) in <top (required)>'
                /opt/gitlab/embedded/bin/bundle:25:in `load'
                /opt/gitlab/embedded/bin/bundle:25:in `<main>'
                
                Caused by:
                PG::NotNullViolation: ERROR:  column "organization_id" of relation "fork_networks" contains null values
                /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20250415124320_add_not_null_to_fork_networks_organization_id.rb:9:in `up'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:33:in `block in exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/query_analyzer.rb:83:in `within'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:30:in `exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers/automatic_lock_writes_on_tables.rb:21:in `exec_migration'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:54:in `ddl_transaction'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/runner_backoff/active_record_mixin.rb:21:in `execute_migration_in_transaction'
                /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/pg_backend_pid.rb:14:in `with_advisory_lock'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:189:in `configure_database'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:156:in `configure_pg_databases'
                /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:102:in `block (3 levels) in <top (required)>'
                /opt/gitlab/embedded/bin/bundle:25:in `load'
                /opt/gitlab/embedded/bin/bundle:25:in `<main>'
                Tasks: TOP => db:migrate
                (See full trace by running task with --trace)
                Running db:migrate rake task
                main: == [advisory_lock_connection] object_id: 48000, pg_backend_pid: 2469649
                main: == 20250415124320 AddNotNullToForkNetworksOrganizationId: migrating ===========
                main: -- change_column_null(:fork_networks, :organization_id, false, nil)
                main: == [advisory_lock_connection] object_id: 48000, pg_backend_pid: 2469649

I have this data in the aforementioned relation:

gitlabhq_production=# select * from fork_networks;
 id | root_project_id | deleted_root_project_name | organization_id 
----+-----------------+---------------------------+-----------------
  1 |              22 |                           |                
  2 |              50 |                           |                
  3 |              58 |                           |                
  4 |              67 |                           |                
  5 |              72 |                           |                
  6 |              79 |                           |                
  7 |             148 |                           |                
  8 |             178 |                           |                
  9 |             102 |                           |                
 10 |             377 |                           |                
 11 |             663 |                           |                
 12 |             707 |                           |                
 13 |             794 |                           |                
 14 |             714 |                           |                
(14 rows)

How can I fix this? Thanks,

1 Like

First roll back your gitlab to the previous version,
then go into the database and run this sql to add a default org id.

UPDATE fork_networks 
SET organization_id = projects.organization_id 
FROM projects 
WHERE fork_networks.root_project_id = projects.id 
AND fork_networks.organization_id IS NULL;

the check again

select * from fork_networks;

and update any that might have been missed

now try updating your gitlab again.

It looks like this migration will be fixed in an upcoming patch release: Upgrade from 17.11.2 to 18.0.0: column "organization_id" of relation "fork_networks" contains null values (#543167) · Issues · GitLab.org / GitLab · GitLab.

Can you try this workaround? Upgrade from 17.11.2 to 18.0.0: column "organization_id" of relation "fork_networks" contains null values (#543167) · Issues · GitLab.org / GitLab · GitLab