Подобный вопрос ко многим, которые уже задавались, но я еще не нашел решение.
Я копирую базу данных 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
не совпадают.