Ubuntu安装GitLab时出现PG::DuplicateSchema错误求助
解决Ubuntu安装GitLab时
PG::DuplicateSchema错误的方法 问题背景
在Ubuntu上通过apt install gitlab-ce或gitlab-ee安装GitLab时,出现如下错误:
PG::DuplicateSchema: ERROR: schema "gitlab_partitions_dynamic" already exists /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20211202041233_init_schema.rb:7:in `up' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/load_balancing/connection_proxy.rb:121:in `public_send' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/load_balancing/connection_proxy.rb:121:in `block in write_using_load_balancer' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/load_balancing/load_balancer.rb:127:in `block in read_write' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/load_balancing/load_balancer.rb:198:in `retry_with_backoff' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/load_balancing/load_balancer.rb:116:in `read_write' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/load_balancing/connection_proxy.rb:120:in `write_using_load_balancer' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/load_balancing/connection_proxy.rb:72:in `transaction' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database.rb:369:in `block in transaction' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database.rb:368:in `transaction' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/lock_retry_mixin.rb:36:in `ddl_transaction' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/pg_backend_pid.rb:15:in `block in with_advisory_lock_connection' /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migrations/pg_backend_pid.rb:12:in `with_advisory_lock_connection' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:117:in `configure_database' /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:95:in `block (3 levels) in <top (required)>' /opt/gitlab/embedded/bin/bundle:23:in `load' /opt/gitlab/embedded/bin/bundle:23:in `<main>'
排查本地PostgreSQL未发现关联数据库、表或schema,怀疑GitLab连接了其他PostgreSQL实例。
解决步骤
1. 确认GitLab使用的PostgreSQL实例
- 查看GitLab数据库配置文件:
sudo cat /etc/gitlab/gitlab.rb | grep -E "(postgresql\['enable'\]|gitlab_rails\['db_host'\])"- 若
postgresql['enable'] = false,说明GitLab使用外部PostgreSQL实例,需连接到该实例进行操作。 - 若
postgresql['enable'] = true(默认),说明使用GitLab内嵌的PostgreSQL实例,需用gitlab-psql命令连接,而非系统自带的psql。
- 若
2. 针对外部PostgreSQL实例的处理
- 连接到外部PostgreSQL实例,切换到GitLab配置的数据库(查看
gitlab_rails['db_database']的值,默认为gitlabhq_production)。 - 删除已存在的重复schema:
DROP SCHEMA IF EXISTS gitlab_partitions_dynamic CASCADE; - 重新执行GitLab配置:
sudo gitlab-ctl reconfigure
3. 针对内嵌PostgreSQL实例的处理
- 停止GitLab服务:
sudo gitlab-ctl stop - 连接到内嵌PostgreSQL:
sudo gitlab-psql -d gitlabhq_production - 删除重复schema:
DROP SCHEMA IF EXISTS gitlab_partitions_dynamic CASCADE; - 退出数据库后,重启服务并重新配置:
sudo gitlab-ctl start && sudo gitlab-ctl reconfigure
4. 彻底清理残留后重新安装(上述方法无效时)
- 完全卸载GitLab:
sudo gitlab-ctl uninstall sudo apt remove --purge gitlab-ce gitlab-ee sudo rm -rf /opt/gitlab /var/opt/gitlab /etc/gitlab sudo userdel git - 清理系统PostgreSQL残留(若之前安装过系统级PostgreSQL):
sudo apt remove --purge postgresql* sudo rm -rf /var/lib/postgresql /etc/postgresql - 重新安装GitLab:
sudo apt update && sudo apt install gitlab-ce - 执行初始化配置:
sudo gitlab-ctl reconfigure
内容的提问来源于stack exchange,提问作者ezop
相关产品推荐
相关产品推荐

