Skip to content

GitLab 18.9.1へのバージョンアップ時の「not_null_constraint_to_pool_repositories_organization_id」エラー解消手順

GitLab 18.9.1へバージョンアップする際に以下のエラーが発生しました。これを解消した手順をメモしておきます。

/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20260209093954_add_not_null_constraint_to_pool_repositories_organization_id.rb:9:in `up'

検証環境

対象 バージョン
GitLab 18.9.1

データベースレコードの修正

GitLabをバージョンアップしたところ、以下のエラーが発生しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Caused by:
PG::CheckViolation: ERROR:  check constraint "check_96233d37c0" of relation "pool_repositories" is violated by some row
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/constraints_helpers.rb:122:in `block in validate_check_constraint'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/timeout_helpers.rb:31:in `disable_statement_timeout'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/constraints_helpers.rb:119:in `validate_check_constraint'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/constraints_helpers.rb:109:in `add_check_constraint'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/constraints_helpers.rb:218:in `add_not_null_constraint'
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20260209093954_add_not_null_constraint_to_pool_repositories_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:94: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/migration_helpers/require_disable_ddl_transaction_for_multiple_locks.rb:40:in `exec_migration'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:46: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:226:in `configure_database'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:182:in `configure_pg_databases'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:114:in `block (3 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:25:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
STDERR:
---- End output of "bash"  ----
Ran "bash"  returned 1

gitlab-rails dbconsole --database mainでデータベースへ接続しようとしたのですがエラーになってしまいました。エラーメッセージから察するに「statement_timeoutが未設定だから」のようです。

# gitlab-rails dbconsole --database main
psql: error: connection to server on socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432" failed: FATAL:  invalid value for parameter "statement_timeout": ""

とりあえず、直接psqlコマンドを実行してデータベースへ接続しました。

# sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql -d gitlabhq_production
psql (16.11)
Type "help" for help.

pool_repositoriesテーブルにorganization_idNULLのレコードを検索すると1件ありました。

gitlabhq_production=# SELECT count(*) FROM pool_repositories WHERE organization_id IS NULL;
 count
-------
     1
(1 row)

このレコードを「1」で更新します。

gitlabhq_production=# UPDATE pool_repositories SET organization_id = 1 WHERE organization_id IS NULL;
UPDATE 1
gitlabhq_production=# SELECT count(*) FROM pool_repositories WHERE organization_id IS NULL;
 count
-------
     0
(1 row)

これで作業終了です。データベースからログアウトします。

gitlabhq_production=# \q

これでエラーが解消し、GitLabがバージョンアップできました。