Postgresql
在不同的架構中安裝 PostGIS 會導致拓撲擴展找不到幾何類型
我有一個正常工作的現有數據庫架構的 sql 轉儲。當我嘗試將其載入到新的空數據庫
psql new_db < dump.sql
中時,出現以下錯誤:ERROR: 42704: type "geometry" does not exist LOCATION: LookupTypeNameOid, parse_type.c:228 Time: 51.680 ms
該
dump.sql
文件在下面被引用到失敗的行:-- -- PostgreSQL database dump -- -- Dumped from database version 10.1 -- Dumped by pg_dump version 10.1 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- Name: bridj; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA bridj; -- -- Name: postgis; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA postgis; -- -- Name: topology; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA topology; -- -- Name: SCHEMA topology; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON SCHEMA topology IS 'PostGIS Topology schema'; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- Name: postgis; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA postgis; -- -- Name: EXTENSION postgis; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION postgis IS 'PostGIS geometry, geography, and raster spatial types and functions'; -- -- Name: postgis_topology; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS postgis_topology WITH SCHEMA topology;
似乎
postgis_topology
擴展無法找到該geometry
類型,因為它位於postgis
架構而不是public
架構中。我試過跑步set show_path to "$user", public, postgis;
但這沒有效果;創建擴展失敗並出現同樣的錯誤。
更多背景:
- 架構移動的原因是我們使用數據庫架構來隔離多個租戶的數據。因此,
public
不會總是在搜尋路徑中。通過將 PostGIS 移至其自己的模式,我們可以始終將其保留在搜尋路徑中Postgres 10.1
POSTGIS=“2.4.2 r16113” PGSQL=“100” GEOS=“3.6.2-CAPI-1.10.2 4d2925d6” PROJ=“Rel. 4.9.3,2016 年 8 月 15 日” GDAL=“GDAL 2.2.3,2017 年發布/11/20” LIBXML=“2.9.7” LIBJSON=“0.12.1” LIBPROTOBUF=“1.3.0” 拓撲柵格
架構移動的原因是我們使用數據庫架構來隔離多個租戶的數據。因此,公眾不會總是在搜尋路徑中。通過將 PostGIS 移至其自己的模式,我們可以始終將其保留在搜尋路徑中
祝你好運。在 PostGIS 的新版本中不再可能,包括 2.4.2 r16113 - 您正在使用的版本。從網站,
從 PostGIS 2.3 開始,postgis 擴展已更改為不再允許重定位。擴展中的所有函式呼叫現在都是模式限定的。
您必須將其安裝到公共環境中,然後再移動它。YMMV。不支持。再次,從官方網站,
UPDATE pg_extension SET extrelocatable = TRUE WHERE extname = 'postgis'; ALTER EXTENSION postgis SET SCHEMA postgis; ALTER EXTENSION postgis UPDATE TO "2.4.1next"; ALTER EXTENSION postgis UPDATE TO "2.4.1";