许多已经被问到的类似问题,但是我还没有找到解决方案。
我正在使用以下方法将Postgres数据库从本地计算机复制到服务器:
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
但是,每当我尝试执行此操作时,任何带有PostGIS geography
列的表都将被跳过并且不会被复制,并且留下以下错误:
ERROR: type "<mydb>.geography" does not exist
在此服务器上,我已成功安装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)
我唯一可能导致这种头痛的猜测是,本地计算机上的超级用户与远程超级用户的名称不同。即localuser
和remoteuser
不匹配。
答案 0 :(得分:3)
其余答案假定您引用的错误是还原转储时的 first 错误。如果不是,则可能是先前错误(例如,CREATE EXTENSION postgis
失败)造成的。
如果在两个服务器上都安装了PostGIS,则该消息表明它在两个数据库上都以不同的模式安装。
检查结果
\dx postgis
在两个数据库上进行检查。
由于PostGIS不是可重定位的扩展,因此必须删除并重新创建它才能将其移动到其他模式。