Espero poder ajudar aqueles que passaram pelos mesmos problemas que eu.

Tive alguns problemas na execução do pg_upgrade, pois meus tablespaces
ficavam em diretórios diferentes do padrão do postgres e o pg_upgrade não
os leva para a nova estrutura.
Achei um pequeno e único guia na internet e o readaptei para a migração,
pois o mesmo estava um pouco confuso e tinha alguns erros.

A migração foi executada dentro de um mesmo disco ou storage, lógico com
dois clusters do postgres, um antigo na versão 9.1 e um futuro para a
versão 9.3.


Estou utilizando o debian e tenho a seguinte estrutura ( mudei os nomes
para exemplificar . ) ACONSELHO QUE A MIGRAÇÃO SEJA FEITA EM SERVIDORAS QUE
NÃO SEJAM AS DE PRODUÇÃO. Restaurei o backup em máquinas de testes.


Cluster da versão 9.1

/postgres-prod/9.1/antigo/dados/
/postgres-prod/9.1/antigo/tablespaces/xxxxxx ( xxxxxx sao as diversas
subpastas de diversos tablespaces, que no meu caso eu tenho )

Novo cluster para a versão 9.3

 /postgres-prod/9.3/novo/dados/
 /postgres-prod/9.3/novo/tablespaces/yyyyyyy ( yyyyyy sao as diversas
pastas de diversos tablespaces )

O que ocorre, quando migramos seguindo a forma padrão, todos os tablespaces
migrados para a versão 9.3, são colocados diretamente debaixo da estrutura
anterior, apenas identificados pela versão. Se não fizéssemos o
procedimento abaixo, ficariam assim:

/postgres-prod/9.1/antigo/tablespaces/PG_9.1_201105231
/postgres-prod/9.1/antigo/tablespaces/PG_9.3_201184324


Como eu desejo:

/postgres-prod/9.1/antigo/tablespaces/PG_9.1_201105231
/postgres-prod/9.3/novo/tablespaces/PG_9.3_201184324


isso iria gerar um trabalho imenso, riscos, principalmente no caso de uma
base muito grande. No meu caso, migrei aproximadamente 400 Gb e fou migrar
uma outra base de 1.2Tb, seguindo a mesma receita.

Antes de começar, crie o cluster básico para a versão 9.3. Não o modifique,
apenas faça o ajuste de localização dos dados e tablespaces.
Crie as pastas dos tablespaces ( novos ) , mantendo as vazias.

Ex.

/postgres-prod/9.3/novo/tablespaces/ , se houver necessidade de subpastas,
você deverá criá-las também, porém vazias....tablespaces/vendas
,..tablespaces/notas....

O procedimento:

/usr/lib/postgresql/9.3/bin/pg_upgrade -b /usr/lib/postgresql/9.1/bin/ -B
/usr/lib/postgresql/9.3/bin/ -d /postgres-prod/9.1/antigo/dados/  -D
/postgres-prod/9.3/novo/dados/ -o ' -c
config_file=/etc/postgresql/9.1/antigo/postgresql.conf' -O ' -c
config_file=/etc/postgresql/9.3/novo/postgresql.conf' -u 'postgres'

Performing Consistency Checks
-----------------------------
Checking cluster versions                                   ok
Checking database user is a superuser                       ok
Checking for prepared transactions                          ok
Checking for reg* system OID user data types                ok
Checking for contrib/isn with bigint-passing mismatch       ok
Creating dump of global objects                             ok
Creating dump of database schemas

APERTE CONTROL z , nesse ponto, para que a execução seja pausada.

Edite o pg_upgrade_dump_globals.sql e altere o local dos tablespaces ,
mudando para o local da versão 9.3.

Como exemplo, os tablespaces na 9.1 ficavam na pasta :

/postgres-prod/9.1/antigo/tablespaces/  e voce deverá mudá-los para
/postgres-prod/9.3/novo/tablespaces/


Salve o arquivo e vamos continuar a execução da migração, para isso dê o
comando abaixo:

fg 1    ( Isso é Sistema Operacional ).

Aguarde o termino da migração e siga as orientações que serão colocadas em
tela, tipo: analyze e delete da versão antiga, claro, isso após ter
bastante certeza que está tudo ok.

Minha sugestão é que você crie pequenos clusters de teste, um na versão 9.1
e outro na 9.3 e faça neles os testes.

Espero poder ajudar.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a