导致“postgis.backend”已设置的原因
错误“postgis.backend”已设置
时常出现在 PostGIS 邮件列表中。该问题通常在升级期间或升级后出现。
问题类似于以下内容
从 2.1 升级到 Postgis 2.3 后,我的服务器日志中填充了以下消息:警告“postgis.backend”已设置,在重新连接之前无法更改
如果您安装了 legacy.sql
文件,尤其是在 PostGIS 3+ 版本发布之前,旧版函数可能仍指向旧 PostGIS 库的位置。
解决方法是运行旧的 legacy_uninstall.sql
,然后重新安装新的 legacy.sql
文件。
legacy.sql
脚本通常位于 PostgreSQL share\contrib\postgis
目录中。例如,对于 9.4 PostgreSQL 和 2.1 PostGIS
# Remove the old functions
psql -d your_db -f /usr/share/postgresql/9.4/contrib/postgis-2.1/uninstall_legacy.sql
# If you want still need legacy functions
psql -d your_db -f /usr/share/postgresql/9.4/contrib/postgis-3.2/legacy.sql
一般来说,您可能不想使用旧版函数,因此在删除它们后检查并查看您的应用程序是否都正常,也许您不需要再次安装它们。
如果您的 postgis_sfcgal
版本是通过扩展安装的。这将是 postgis 2.2 或更高版本,您可以运行
ALTER EXTENSION postgis_sfcgal UPDATE;
如果您有多个版本的 PostGIS,并且不想要最后安装的版本,您可能需要执行此操作。确保版本与您的 postgis 版本匹配,因为这两个扩展使用相同的 postgis 库。
ALTER EXTENSION postgis_sfcgal UPDATE TO "2.3.2";
您正在运行过时的微版本。
早在我们在 PostGIS 中首次引入 GUC 时,升级期间存在一个错误,在小版本之间切换时会触发该错误。此问题早已得到修复,因此请确保您已安装最新的小版本微版本,然后执行。
ALTER EXTENSION postgis UPDATE;
也许您做了一些非正统的事情,设法在没有扩展的情况下安装了旧版本的 PostGIS,并在扩展的情况下安装了新版本。或者,您可能有一些函数是从不完整的升级或安装中遗留下来的。
因此,要修复,您必须找到它们并更新它们。以下是一个查询,用于查找您已安装的 postgis 库版本数以及每个版本的函数数
SELECT probin, count(*)
FROM pg_catalog.pg_proc
WHERE probin LIKE '%/postgis%'
GROUP BY probin
ORDER BY probin;
在正常的安装中,您应该只有一行类似于此。您的版本号可能不同,计数也可能不同。
| probin | count |
|---------------------|-------|
|$libdir/postgis-2.4 | 446 |
如果您有多行,则表示您混合了库版本
| probin | count
---------------------+-------
$libdir/postgis-2.4 | 446
$libdir/postgis-2.1 | 4
运行此查询以使用您列出的最新版本替换 postgis-2.1
。
UPDATE pg_catalog
SET pg_proc = '$libdir/postgis-2.4'
WHERE probin LIKE '%/postgis-2.1%';