Eu herdei um servidor antigo (Ubuntu 12.04.5) com um banco de dados rodando no PostgreSQL 8.3.8 com o PostGIS 1.3.5 Extension. Esse servidor será substituído por um novo servidor (4.14.12-1-ARCH), onde utilizo o docker para separar diferentes instâncias do PostgreSQL. Para um primeiro teste, usei a imagem mdillon / postgis: latest para criar a nova configuração. Isso deve resultar no PostgreSQL 10.1 + PostGIS 2.4.
Quando tento restaurar um despejo do banco de dados antigo no novo servidor, recebo muitos erros, como o seguinte:
...
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
);
...
O banco de dados antigo precisa de bibliotecas que não estão mais disponíveis com a nova versão do Postgres-Postgis. Qual é a melhor maneira de lidar com isso?
Como estou usando o docker, talvez eu possa simplesmente criar um contêiner com o software antigo e mantê-lo em execução sem tocar no banco de dados. O banco de dados é usado apenas internamente: Nenhum problema de segurança aqui. Por outro lado, gostaria de usar as novas versões do Postgres-Postgis para estar melhor preparado para o futuro. Mas é realisticamente possível realizar uma atualização do banco de dados e seus recursos?
Qual é a melhor maneira de lidar com isso?
Tags postgresql database postgis