ERROR: functions in index predicate must be marked IMMUTABLE while running 14.4 PostgreSQL migrations
When running migrations for 14.4, I encounter the following error:
System Info: ------------ chef_version=15.17.4 platform=ubuntu platform_version=20.04 ruby=ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux] program_name=/opt/gitlab/embedded/bin/chef-client executable=/opt/gitlab/embedded/bin/chef-client Recipe: gitlab::gitlab-rails * execute[clear the gitlab-rails cache] action run - execute /opt/gitlab/bin/gitlab-rake cache:clear Running handlers: There was an error running gitlab-ctl reconfigure: rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/re sources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1' ---- Begin output of "bash" "/tmp/chef-script20211024-34-zorbw" ---- STDOUT: rake aborted! StandardError: An error has occurred, all later migrations canceled: PG::InvalidObjectDefinition: ERROR: functions in index predicate must be marked IMMUTABLE /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:155:in `block in add_concurrent_index' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:359:in `disable_statement_timeout' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:154:in `add_concurrent_index' /opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20211004110500_add_temporary_index_to_issue_metrics.rb:9:in `up' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:31:in `ddl_transaction' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:61:in `block (3 levels) in ' /opt/gitlab/embedded/bin/bundle:23:in `load' /opt/gitlab/embedded/bin/bundle:23:in `' Caused by: ActiveRecord::StatementInvalid: PG::InvalidObjectDefinition: ERROR: functions in index predicate must be marked IMMUTABLE /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:155:in `block in add_concurrent_index' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:359:in `disable_statement_timeout' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:154:in `add_concurrent_index' /opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20211004110500_add_temporary_index_to_issue_metrics.rb:9:in `up' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:31:in `ddl_transaction' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:61:in `block (3 levels) in ' /opt/gitlab/embedded/bin/bundle:23:in `load' /opt/gitlab/embedded/bin/bundle:23:in `' Caused by: PG::InvalidObjectDefinition: ERROR: functions in index predicate must be marked IMMUTABLE /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:155:in `block in add_concurrent_index' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:359:in `disable_statement_timeout' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:154:in `add_concurrent_index' /opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20211004110500_add_temporary_index_to_issue_metrics.rb:9:in `up' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:31:in `ddl_transaction' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:61:in `block (3 levels) in ' /opt/gitlab/embedded/bin/bundle:23:in `load' /opt/gitlab/embedded/bin/bundle:23:in `' Tasks: TOP => db:migrate (See full trace by running task with --trace) == 20211004110500 AddTemporaryIndexToIssueMetrics: migrating ================== -- transaction_open?() -> 0.0000s -- index_exists?(:issue_metrics, :issue_id, {:where=>"EXTRACT(YEAR FROM first_mentioned_in_commit_at) > 2019", :name=>"index_issue_metrics_first_mentioned_in_commit", :algorithm=>:concurrently}) -> 0.0055s -- execute("SET statement_timeout TO 0") -> 0.0002s -- add_index(:issue_metrics, :issue_id, {:where=>"EXTRACT(YEAR FROM first_mentioned_in_commit_at) > 2019", :name=>"index_issue_metrics_first_mentioned_in_commit", :algorithm=>:concurrently}) -- execute("RESET statement_timeout") -> 0.0002s STDERR: ---- End output of "bash" "/tmp/chef-script20211024-34-zorbw" ---- Ran "bash" "/tmp/chef-script20211024-34-zorbw" returned 1
This looks very similar to #339091 (closed)
issue_metrics
looks like this:
gitlabhq_production-# \d issue_metrics Table "public.issue_metrics" Column | Type | Collation | Nullable | Default ------------------------------------+--------------------------+-----------+----------+------------------------------------------- id | integer | | not null | nextval('issue_metrics_id_seq'::regclass) issue_id | integer | | not null | first_mentioned_in_commit_at | timestamp with time zone | | | first_associated_with_milestone_at | timestamp with time zone | | | first_added_to_board_at | timestamp with time zone | | | created_at | timestamp with time zone | | | updated_at | timestamp with time zone | | | Indexes: "issue_metrics_pkey" PRIMARY KEY, btree (id) "index_unique_issue_metrics_issue_id" UNIQUE, btree (issue_id) "index_issue_metrics_on_issue_id_and_timestamps" btree (issue_id, first_mentioned_in_commit_at, first_associated_with_milestone_at, first_added_to_board_at) "issue_metrics_issue_id_idx" btree (issue_id) Foreign-key constraints: "fk_rails_4bb543d85d" FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED