2015-11-24 3 views
3

Мне нужно перенести установку PostGIS из базы данных A в новую базу данных B. У меня есть PostGIS 2.1.7 на A и 2.1.8 на B. Обе базы данных одинаковы - версия PostgreSQL - 9.4.4.pg_dump PostGIS: схема пуста

Конфигурация расширения PostGIS на А имеет следующий вид:

         List of installed extensions 
Name | Version | Schema |        Description 
------------+---------+------------+--------------------------------------------------------------------- 
btree_gist | 1.0  | edrive  | support for indexing common datatypes in GiST 
plpgsql | 1.0  | pg_catalog | PL/pgSQL procedural language 
postgis | 2.1.7 | postgis | PostGIS geometry, geography, and raster spatial types and functions 
(3 rows) 

То же самое на В (за исключением PostGIS 2.1.8).

Command Я использую для экспорта:

pg_dump -Fc -b A -p 5433 -U postgres > A.dmp 

для восстановления:

pg_restore -Fc -d B -p 5432 A.dmp 

Вот часть журнала:

pg_restore: [archiver (db)] could not execute query: ERROR: type "postgis.geometry" does not exist 
LINE 9:  location postgis.geometry(Point,4326), 
        ^

Теперь давайте заглянем внутрь от А .dmp - таблица пространственных_ref_sys пуста, просто команда COPY, нет данных:

COPY spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) FROM stdin; 
.....postgis..........postgres.....false.....347.............................0.....17220.....roles. 
...TABLE DATA................N...COPY roles (id, name, createdate, updatedate, description, value) FROM stdin; 
.....security..........services... 

Вопрос в том, почему pg_dump не сбрасывает содержимое схемы PostGIS?

UPD1:

содержание общего дампа в текстовом формате: данные для spatial_ref_sys:

COPY spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) FROM stdin; 
\. 

Но мы можем увидеть 3911 записей там:

edrivep1=# select count(*) from postgis.spatial_ref_sys; 
count 
------- 
    3911 
(1 row) 

и

-bash-4.1$ pg_restore -l edrivep1.dmp | grep spatial 
4932; 0 79804 TABLE DATA postgis spatial_ref_sys postgres 
+0

Похоже, что на новой машине не установлено postgis и включено. – wildplasser

+0

Исходный дамп пуст - так что проблема не в новой базе данных. – maksim2020

+0

'type" postgis.geometry "не существует" означает, что тип не существует. Эти типы (точка, многоугольник, геометрия, ...) создаются путем установки postgis. На новой машине. Перед чтением дампа. – wildplasser

ответ

1

m разрешается. Был неправильный путь search_path для схемы postgis во второй базе данных B - когда я изменил схему postgis для public и search_path, установленную в «edrive, public, postgis» в BOTH-базах, тогда все прошло хорошо.

Смежные вопросы