You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 10中Citext扩展控制文件无法打开问题求助

解决Fedora 28上PostgreSQL 10执行mix ecto.migrate时citext.control找不到的问题

你遇到的核心矛盾是:PostgreSQL服务器在查找citext扩展时,错误地指向了/usr/pgsql-10/share/extension路径,但实际扩展文件存放在pg_config --sharedir返回的/usr/share/pgsql/extension目录下。下面是一步步的排查和解决思路:

1. 先确认运行中的PostgreSQL服务器来源

Fedora默认仓库的PostgreSQL包和PostgreSQL官方提供的RPM包,路径结构完全不同,这大概率是问题根源:

  • 执行以下命令查看postgres进程的实际路径:
    ps aux | grep postgres
    
    • 如果输出里的路径是/usr/bin/postgres:这是Fedora默认仓库的包,它的扩展目录应该和pg_config一致,是/usr/share/pgsql/extension。
    • 如果路径是/usr/pgsql-10/bin/postgres:这是PostgreSQL官方的RPM包,默认扩展目录是/usr/pgsql-10/share/extension,但你安装的postgresql10-contrib是Fedora默认包,导致路径不匹配。

对应解决方法:

  • 若是官方RPM包的PostgreSQL:
    卸载Fedora默认的contrib包,转而安装官方仓库的对应版本:

    sudo dnf remove postgresql10-contrib
    sudo dnf install https://download.postgresql.org/pub/repos/yum/10/fedora/fedora-28-x86_64/pgdg-fedora10-10-2.noarch.rpm
    sudo dnf install postgresql10-contrib
    

    安装完成后,citext相关文件会自动出现在/usr/pgsql-10/share/extension目录下。

  • 若是Fedora默认包的PostgreSQL:
    说明PostgreSQL服务器的sharedir配置被错误修改了,需要调整配置文件:

    1. 打开PostgreSQL的主配置文件(通常路径是/var/lib/pgsql/10/data/postgresql.conf)。
    2. 找到sharedir参数,将其值从/usr/pgsql-10/share改为/usr/share/pgsql。
    3. 重启PostgreSQL服务生效:
      sudo systemctl restart postgresql-10
      

2. 手动验证扩展可用性

调整完成后,先通过psql手动创建citext扩展,确认问题是否解决:

psql -U 你的数据库用户名 -d 你的数据库名

在psql交互界面执行:

CREATE EXTENSION IF NOT EXISTS citext;

如果没有报错,说明扩展路径已正确,此时再运行mix ecto.migrate应该就能正常执行了。

3. 临时应急方案(不推荐长期使用)

如果你暂时不想调整包或配置,可以通过软链接让PostgreSQL找到扩展文件:

sudo mkdir -p /usr/pgsql-10/share/extension
sudo ln -s /usr/share/pgsql/extension/citext.control /usr/pgsql-10/share/extension/
sudo ln -s /usr/share/pgsql/extension/citext--*.sql /usr/pgsql-10/share/extension/

但这种方法可能在后续包更新时出现冲突,优先推荐前面的正规解决方法。

内容的提问来源于stack exchange,提问作者Tae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:52:42