在AWS EC2实例的PostgreSQL 10.1中安装Citext扩展遇阻求助
解决AWS EC2上PostgreSQL 10.1 Citext扩展部署问题
Hey there, let's work through these issues step by step—since you're new to Linux, I'll keep everything clear and actionable, no jargon overload!
先理清楚核心问题
你的三个报错其实是连锁的:你是源码编译安装的PostgreSQL 10.1(路径在/usr/local/pgsql),但尝试用系统自带的旧版本PostgreSQL contrib包来补全扩展,两者的路径、版本不兼容,再加上错误用root操作数据库,才触发了一系列问题。
一步步解决所有问题
方法一:从源码编译安装citext(推荐,版本完全匹配)
这是最稳妥的方式,因为源码编译的扩展能完美适配你安装的PostgreSQL 10.1:
- 先找回PostgreSQL 10.1的源码包(如果之前删了,重新下载):
wget https://ftp.postgresql.org/pub/source/v10.1/postgresql-10.1.tar.gz tar -zxvf postgresql-10.1.tar.gz cd postgresql-10.1/contrib/citext - 编译citext扩展,指定你的PostgreSQL安装路径(因为是自定义编译的,系统默认找不到):
make USE_PGXS=1 PG_CONFIG=/usr/local/pgsql/bin/pg_config - 安装扩展,这里需要用
sudo(因为要写入/usr/local/pgsql这个系统目录):sudo make USE_PGXS=1 PG_CONFIG=/usr/local/pgsql/bin/pg_config install - 切换到PostgreSQL专用的
postgres用户(永远不要用root操作数据库,会搞乱权限),进入psql:sudo su - postgres psql - 现在执行创建扩展的命令,应该就能成功了:
CREATE EXTENSION citext;
方法二:修复权限并复制文件(不推荐,版本可能不兼容)
如果你坚持想用系统的postgresql96-contrib包,得先修正路径和权限问题,但注意:版本不匹配可能导致未知bug,谨慎使用:
- 首先纠正路径拼写错误:你之前写的
usr/share/psql96/extenson应该是/usr/pgsql-9.6/share/extension/(这是Amazon Linux/RHEL上PostgreSQL 9.6的默认扩展路径) - 用
sudo复制文件,并修复目标目录的权限:sudo cp /usr/pgsql-9.6/share/extension/citext.* /usr/local/pgsql/share/extension/ sudo chown postgres:postgres /usr/local/pgsql/share/extension/citext.* - 切换到
postgres用户执行CREATE EXTENSION citext;,但如果出现版本不兼容报错,还是建议回到方法一。
新手必看注意事项
- 绝对不要用root用户操作PostgreSQL:PostgreSQL默认用
postgres用户管理数据库文件和操作,root操作会导致权限混乱,后续各种莫名其妙的报错。 - 源码编译的PostgreSQL要对应源码编译扩展:系统自带的PostgreSQL包和自定义编译的版本、路径不匹配,直接混用很容易出问题。
内容的提问来源于stack exchange,提问作者yeller
相关产品推荐
相关产品推荐

