创建Postgis扩展: "错误:无法打开扩展控制文件"

14

当我运行create extension postgis;时,出现以下错误:

ERROR: could not open extension control file "/Library/PostgreSQL/9.6/share/postgresql/extension/postgis.control": No such file or directory

我正在使用在OS X El Capitan上使用Homebrew安装的Postgres 9.6.3和PostGIS 2.3.2。

mdfind -name postgis.control 显示:

/usr/local/Cellar/postgis/2.3.2/share/postgresql/extension/postgis.control

brew info postgis 显示:

PostGIS extension modules installed to:
/usr/local/share/postgresql/extension

当我启动Postgres控制台时,我看到:

psql (9.6.3, server 9.6.1)
我看到了一个类似的问题:PostGIS Homebrew installation referencing an old path?,并尝试使用顶部答案中给出的命令重新加载postgresql,但我仍然看到psql (9.6.3, server 9.6.1)。此外,我认为我的问题不同,因为它正在寻找扩展控制文件/Library而不是/usr/local/Cellar
希望能得到任何帮助。

也许这个答案能帮到你。 - Michel Milezzi
1
@michel.milezzi 那正是我尝试的,但它不能创建扩展。 - Fiona
好的,@Fiona,最终你用什么方法解决了问题? - abbood
1
@abbood 最终安装了Postgres.app - Fiona
1
我也一样,哈哈哈哈。 - abbood
请注意,如果您拼写扩展名时出错,例如将 pg_stat_statements 拼错为 pg_stat_statment,则也会出现此错误信息 :-( - blubb
2个回答

10
当您尝试安装postgis时,它会作为依赖项安装最新版本的postgresql。因此,如果您安装了postgres@V(其中V是用户期望的版本),然后运行以下命令: brew install postgis 它将安装postgres10.1或最新版本。因此,在此之后运行 create extension postgis; 在postgresql@V中,它将尝试检查其扩展目录,并且由于此postgis已安装在与其一起安装的postgresql版本的扩展文件夹中,因此不会在扩展目录中找到postgis.control。
要解决此问题,您必须从给定的postgis安装创建符号链接到所需的postgresql@V。以下示例适用于postgresql@9.6。
ln -s  /usr/local/share/postgresql/extension/postgis* /usr/local/Cellar/postgresql@9.6/9.6.6/share/postgresql@9.6/extension/
ln -s /usr/local/lib/postgresql/postgis-2.3.so /usr/local/Cellar/postgresql@9.6/9.6.6/lib/postgis-2.3
ln -s /usr/local/lib/postgresql/rtpostgis-2.3.so /usr/local/Cellar/postgresql@9.6/9.6.6/lib/

在运行这些命令之前,请检查您系统中的postgresql版本和文件路径。
感谢此代码片段提供的帮助。

现在看起来似乎走到了死胡同,当默认的 Homebrew Postgres 版本是 13,而你尝试为早期版本安装 postgis 时会出现以下错误:“ERROR: PostGIS built for PostgreSQL 13.0 cannot be loaded in PostgreSQL 12.7”。 - Cloud Artisans
@DeepakPatankar,在几个小时之后放弃了,最终只是使用 brew install 安装了最新的postgresql和postgis。不想再浪费时间了 :( - Cloud Artisans

5

我曾经遇到过类似的问题,具体情况可以在这里查看。当在Postgres控制台中提到服务器时,意味着你正在引用更旧的代码库。停止该服务器并使用以下命令启动正确的服务器。

$ brew services list

这将给你一个正在运行的数据库服务器列表。
$ brew services stop postgresql@<older-version>
$ brew services start postgresql

但这将迫使我更改数据库版本。如何在旧版本上安装postgis并使其正常工作? - Rafs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接