Мне нужно перенести установку 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
Похоже, что на новой машине не установлено postgis и включено. – wildplasser
Исходный дамп пуст - так что проблема не в новой базе данных. – maksim2020
'type" postgis.geometry "не существует" означает, что тип не существует. Эти типы (точка, многоугольник, геометрия, ...) создаются путем установки postgis. На новой машине. Перед чтением дампа. – wildplasser