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
