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をバージョンアップしたところ、以下のエラーが発生しました。
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_idがNULLのレコードを検索すると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)
これで作業終了です。データベースからログアウトします。
これでエラーが解消し、GitLabがバージョンアップできました。