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

时间:2017-06-30 17:11:52

标签: postgresql postgis

运行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中寻找扩展控制文件。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

我在完整详细信息here时遇到了类似的问题。在Postgres控制台中提到服务器时,这意味着您引用了较旧的代码库。停止该服务器并使用以下命令启动正确的服务器。

$ brew services list

这将为您提供正在运行的数据库服务器列表。

$ brew services stop postgresql@<older-version>
$ brew services start postgresql

答案 1 :(得分:2)

当您尝试安装postgis时,它会安装最新版本的postgresql以及它作为依赖项。 所以如果你安装了postgres @V(其中V是用户需要的版本)

brew install postgresql@V

以后你运行这个命令

brew install postgis

它将安装postgres10.1或其他最新版本。 所以在那之后如果运行

create extension postgis;

在postgresql @V中,它将尝试检查其扩展目录,并且在扩展目录中找不到postgis.control,因为这个postgis安装在随之安装的postgresql版本的扩展文件夹中。

要解决此问题,您必须创建一个符号链接,从给定的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版本和文件路径

感谢this gist寻求帮助。