Тип PostGIS «геометрия» не существует, когда pg_dump копирует базу данных на сервер - PullRequest
3 голосов
/ 14 марта 2019

Подобный вопрос ко многим, которые уже задавались, но я еще не нашел решение.

Я копирую базу данных 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 не совпадают.

1 Ответ

3 голосов
/ 14 марта 2019

В остальной части ответа предполагается, что указанная вами ошибка является ошибкой first при восстановлении дампа.В противном случае это может быть следствием более ранней ошибки (например, сбой CREATE EXTENSION postgis).

Если PostGIS установлен на обоих серверах, в сообщении предполагается, что он установлен в разных схемах в обеих базах данных.

Проверьте результаты

\dx postgis

в обеих базах данных для проверки.

Поскольку PostGIS не является перемещаемым расширением, его необходимо удалить и заново создать, чтобы переместитьэто в другую схему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...