Postgresql

在不同的架構中安裝 PostGIS 會導致拓撲擴展找不到幾何類型

  • February 6, 2018

我有一個正常工作的現有數據庫架構的 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";

引用自:https://dba.stackexchange.com/questions/197201