1

Я унаследовал старый сервер (Ubuntu 12.04.5) с базой данных, работающей на PostgreSQL 8.3.8 с расширением PostGIS 1.3.5. Этот сервер будет заменен новым сервером (4.14.12-1-ARCH), где я использую docker для разделения различных экземпляров PostgreSQL. Для первого теста я использовал образ mdillon/postgis:latest для создания новой настройки. Это должно привести к PostgreSQL 10.1 + PostGIS 2.4.

Когда я пытаюсь восстановить дамп старой базы данных на новом сервере, я получаю много ошибок, таких как:

...
pg_restore: creating FUNCTION "public.st_box2d_in(cstring)"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 626; 1255 1052513 FUNCTION st_box2d_in(cstring) postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  could not access file "/usr/lib/postgresql/8.3/lib/liblwgeom": No such file or directory
    Command was: CREATE FUNCTION st_box2d_in(cstring) RETURNS box2d
    LANGUAGE c IMMUTABLE STRICT
    AS '/usr/lib/postgresql/8.3/lib/liblwgeom', 'BOX2DFLOAT4_in';
pg_restore: creating FUNCTION "public.st_box2d_out(box2d)"
pg_restore: [archiver (db)] Error from TOC entry 628; 1255 1052515 FUNCTION st_box2d_out(box2d) postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  could not access file "/usr/lib/postgresql/8.3/lib/liblwgeom": No such file or directory
    Command was: CREATE FUNCTION st_box2d_out(box2d) RETURNS cstring
    LANGUAGE c IMMUTABLE STRICT
    AS '/usr/lib/postgresql/8.3/lib/liblwgeom', 'BOX2DFLOAT4_out';
pg_restore: creating TYPE "public.box2d"
pg_restore: [archiver (db)] Error from TOC entry 2331; 1247 1052511 TYPE box2d postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  function st_box2d_in(cstring) does not exist
    Command was: CREATE TYPE box2d (
    INTERNALLENGTH = 16,
    INPUT = st_box2d_in,
    OUTPUT = st_box2d_out,
    ALIGNMENT = int4,
    STORAGE = plain
);
...

Для старой базы данных нужны библиотеки, которые больше не доступны в новой версии Postgres-Postgis. Какой лучший способ справиться с этим?

Поскольку я использую Docker, я мог бы просто создать контейнер со старым программным обеспечением и продолжать его работу, не касаясь базы данных. База данных используется только для внутреннего использования: здесь нет проблем с безопасностью. С другой стороны, я хотел бы использовать новые версии Postgres-Postgis, чтобы лучше подготовиться к будущему. Но реально ли выполнить обновление базы данных и ее функций?

Какой лучший способ справиться с этим?

0