极狐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
相关推荐
不爱洗脚的小滕12 分钟前
【Redis】Scan 命令使用教程:高效遍历海量数据
数据库·redis·bootstrap
宁小法1 小时前
MySQL - 全表扫描 会发生死锁?
数据库·mysql·死锁·存储引擎·全表扫描
瑜伽娃娃1 小时前
基于Redis设计一个高可用的缓存
数据库·redis·缓存
叫我龙翔1 小时前
【MySQL】从零开始了解数据库开发 --- 数据类型
数据库·mysql·数据库开发
睡觉的时候不会困7 小时前
Redis 主从复制详解:原理、配置与主从切换实战
数据库·redis·bootstrap
程序员的世界你不懂8 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
自学也学好编程9 小时前
【数据库】Redis详解:内存数据库与缓存之王
数据库·redis
JAVA不会写9 小时前
在Mybatis plus中如何使用自定义Sql
数据库·sql
IT 小阿姨(数据库)9 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
ChinaRainbowSea10 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程