极狐GitLab 如何管理 PostgreSQL 扩展?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLabhttps://gitlab.cn/install?channel=content\&utm_source=csdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。

极狐GitLab 在 5 月 28 日正式发布了 AI 产品驭码CodeRider。现已开启免费试用,登录官网:https://coderider.gitlab.cn/ 即可申请试用。

更多关于极狐GitLabhttps://gitlab.cn 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。

学习极狐GitLab 的相关资料:

  1. 极狐GitLab 官网https://gitlab.cn
  2. 极狐GitLab 官网文档https://docs.gitlab.cn
  3. 极狐GitLab 论坛https://forum.gitlab.cn/
  4. 极狐GitLab 安装配置https://gitlab.cn/install
  5. 极狐GitLab 资源中心https://resources.gitlab.cn/
  6. AI 产品驭码CodeRiderhttps://coderider.gitlab.cn/

搜索【极狐GitLab】公众号,后台输入加群 ,备注gitlab,即可加入官方微信技术交流群。

本指南记录了如何管理安装外部 PostgreSQL 数据库的 PostgreSQL 扩展。

您必须将以下扩展加载到主要极狐GitLab 数据库中(默认为 gitlabhq_production):

扩展 最小极狐GitLab 版本
pg_trgm 8.6
btree_gist 13.1
plpgsql 11.7

如果您使用 Geo,则必须将以下扩展加载到所有次要跟踪数据库中(默认为 gitlabhq_geo_production):

扩展 最小极狐GitLab 版本
plpgsql 9.0

为了安装扩展,PostgreSQL 要求用户具有超级用户权限。通常,极狐GitLab 数据库用户不是超级用户。因此,在安装扩展时不能使用常规数据库迁移,而是必须在将极狐GitLab 升级到更新版本之前手动安装扩展。

手动安装 PostgreSQL 扩展

为了安装 PostgreSQL 扩展,应遵循以下过程:

  1. 使用超级用户连接到极狐GitLab PostgreSQL 数据库,例如:

    sudo gitlab-psql -d gitlabhq_production

  2. 使用 CREATE EXTENSION 安装扩展程序(本例中为 btree_gist):

    CREATE EXTENSION IF NOT EXISTS btree_gist

  3. 验证已安装的扩展:

    gitlabhq_production=# \dx
    List of installed extensions
    Name | Version | Schema | Description
    ------------+---------+------------+-------------------------------------------------------------------
    btree_gist | 1.5 | public | support for indexing common datatypes in GiST
    pg_trgm | 1.4 | public | text similarity measurement and index searching based on trigrams
    plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
    (3 rows)

在某些系统上,您可能需要安装额外的软件包(例如,postgresql-contrib)才能使某些扩展可用。

典型故障场景

以下是由于未先安装扩展而导致新的极狐GitLab 安装失败的示例。

复制代码
---- Begin output of "bash"  "/tmp/chef-script20210513-52940-d9b1gs" ----
STDOUT: psql:/opt/gitlab/embedded/service/gitlab-rails/db/structure.sql:9: ERROR:  permission denied to create extension "btree_gist"
HINT:  Must be superuser to create this extension.
rake aborted!
failed to execute:
psql -v ON_ERROR_STOP=1 -q -X -f /opt/gitlab/embedded/service/gitlab-rails/db/structure.sql --single-transaction gitlabhq_production

以下是在运行迁移之前未安装扩展的情况示例。

在这种情况下,由于权限不足,数据库迁移无法创建扩展 btree_gist

复制代码
== 20200515152649 EnableBtreeGistExtension: migrating =========================
-- execute("CREATE EXTENSION IF NOT EXISTS btree_gist")

GitLab requires the PostgreSQL extension 'btree_gist' installed in database 'gitlabhq_production', but
the database user is not allowed to install the extension.

You can either install the extension manually using a database superuser:

  CREATE EXTENSION IF NOT EXISTS btree_gist

Or, you can solve this by logging in to the GitLab database (gitlabhq_production) using a superuser and running:

    ALTER regular WITH SUPERUSER

This query will grant the user superuser permissions, ensuring any database extensions
can be installed through migrations.

要从失败的迁移中恢复,必须由超级用户手动安装扩展,并且通过重新运行数据库迁移完成极狐GitLab 升级:

复制代码
sudo gitlab-rake db:migrate
相关推荐
颜颜yan_几秒前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库
lichenyang4533 分钟前
管理项目服务器连接数据库
数据库·后端
沙振宇9 分钟前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql
极小狐13 分钟前
GitLab 安全漏洞 CVE-2025-7739 解决方案
ci/cd·gitlab·devsecops·devops·极狐gitlab
杨云龙UP1 小时前
CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC详细图文教程
数据库·oracle
ezl1fe1 小时前
RAG 每日一技(十八):手写SQL-RAG太累?LangChain的SQL智能体(Agent)前来救驾!
数据库·人工智能·后端
小咖张1 小时前
spring声明式事务,finally 中return对事务回滚的影响
数据库·java 声明式事务
JSON_L1 小时前
MySQL 加锁与解锁函数
数据库·mysql
小凯123452 小时前
接口自动化测试持续集成CI/CD(Jenkins)
ci/cd
白鲸开源2 小时前
收藏!史上最全 Apache SeaTunnel Source 连接器盘点 (2025版),一篇通晓数据集成生态
大数据·数据库·开源