Atualizar banco de dados do PostgreSQL 8.3.8 + PostGIS 1.3.5 para PostgreSQL 10.1 + PostGIS 2.4

1

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?

    
por nevrome 17.01.2018 / 16:03

0 respostas