当pg_dump将数据库复制到服务器时,PostGIS类型“几何”不存在

问题描述 投票:3回答:1

许多已经被问到的类似问题,但我还没有找到解决方案。

我正在使用以下方法将Postgres数据库从本地计算机复制到服务器:

pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

但是,每当我尝试执行此操作时,任何包含PostGIS geography列的表都会被跳过而不会被复制,我将面临以下错误:

ERROR:  type "<mydb>.geography" does not exist 

Attempted solutions:

在此服务器上,我已成功安装PostGIS并创建了相关的扩展:

mydb=# select postgis_version();
            postgis_version            
---------------------------------------
 2.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

此外,geometry是公认的数据类型:

mydb=# \dT *.geometry
                     List of data types
 Schema |   Name   |               Description               
--------+----------+-----------------------------------------
 public | geometry | postgis type: Planar spatial data type.
(1 row)

我的search_path包括相关的一切:

mydb=# show search_path;
      search_path       
------------------------
 mydb, public, postgis

mydb=# SELECT r.rolname, d.datname, rs.setconfig
FROM   pg_db_role_setting rs
LEFT   JOIN pg_roles      r ON r.oid = rs.setrole
LEFT   JOIN pg_database   d ON d.oid = rs.setdatabase
WHERE  r.rolname = 'mydb' OR d.datname = 'mydb';

 rolname | datname |      setconfig       
---------+---------+----------------------
         | mydb    | {search_path=public}
(1 row)

我唯一猜测可能导致这种问题的原因是我本地计算机上的超级用户与远程超级用户的名称不同。即,localuserremoteuser不匹配。

postgresql postgis pg-dump
1个回答
3
投票

答案的其余部分假定您引用的错误是恢复转储时的第一个错误。如果不是,则可能是先前错误的结果(例如,未能使用CREATE EXTENSION postgis)。

如果在两台服务器上都安装了PostGIS,则该消息表明它安装在两个数据库的不同模式中。

检查结果

\dx postgis

在两个数据库上检查。

由于PostGIS不是可重定位的扩展,因此您必须删除并重新创建它以将其移动到其他模式。

© www.soinside.com 2019 - 2024. All rights reserved.