Loading... 答案是:不太行。(必须得手动编译,参考[enable-postgis-extension-for-postgresql-16-on-mac-m2](https://stackoverflow.com/questions/77149123/enable-postgis-extension-for-postgresql-16-on-mac-m2)) 所以本文是标题党。其实我要说的是如何切换到 pg14 并让 postgis 正常跑起来。 首先我们在 pg16 中会遇到如下问题: ```pgsql postgres=# CREATE EXTENSION postgis; ERROR: extension "postgis" is not available 描述: Could not open extension control file "/opt/homebrew/opt/postgresql@16/share/postgresql@16/extension/postgis.control": No such file or directory. 提示: The extension must first be installed on the system where PostgreSQL is running. ``` 这个问题的原因是 postgis 没有把插件所需的内容正确放到 pg16 所需的地方,那么我们需要手动 copy 一下: ```bash cp /opt/homebrew/Cellar/postgis/3.4.3/share/postgresql@14/extension/* /opt/homebrew/opt/postgresql@16/share/postgresql@16/extension/ ``` 然后再启动就会发现版本不适配: ```pgsql postgres=# create extension postgis; ERROR: PostGIS built for PostgreSQL 14.0 cannot be loaded in PostgreSQL 16.4 背景: PL/pgSQL function inline_code_block line 15 at RAISE ``` 这个时候我们重新下载一个 pg14 就可以了,不同版本的软件在 homebrew 中可以同时存在: ```shell brew install postgresql@14 brew services stop postgresql@16 brew services start postgresql@14 ``` 这样就可以正常在 pg14 当中使用了: ```pgsql postgres=# create extension postgis; CREATE EXTENSION postgres=# SELECT ST_Touches( ST_GeomFromText('LINESTRING(0 0, 1 1)'), ST_GeomFromText('LINESTRING(1 1, 2 2)') ); st_touches ------------ t (1 行记录) ``` © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏