Atualização não intencional do Postgresql para 9.2.3

2

OK, sou relativamente novo no linux. Alguns meses atrás, consegui criar um site usando a versão do CentOS, PHP e Postgres 9.1 da Amazon. Eu fiz um initdb on / pgdata que foi montado em um volume do Amazon que eu criei para esse propósito. O site estava zumbindo desde então, e eu senti que isso não era tão difícil, afinal! :)

Mas agora, meu site está inativo. Veja o que aconteceu ...

Ontem entrei para começar algumas alterações no site. A primeira coisa que vi foi que havia algumas atualizações disponíveis (naturalmente), então eu corri "yum update". Ele fez um monte de coisas e relatou sucesso. Legal!

Tudo estava indo bem no meu site até que eu executei uma alteração em uma função do Postgres. Eu recebi um erro:

ERROR: could not load library "/usr/lib64/pgsql/plpgsql.so": "/usr/lib64/pgsql/plpgsql.so": undefined symbol: SPI_plan_get_cached_plan

(estou usando o plpgsql em minhas funções)

O Google levou-me a vários locais que pareciam dizer que só precisava de reiniciar o Postgresql. Eu tentei isso de várias maneiras. Postgres iria parar, mas não começar de novo.

Em algum momento, recebi outra mensagem de erro (mais útil):

"The data directory was initialized by PostgreSQL version 9.1, which is not compatible with this version 9.2.3."

Qual o? Minha atualização do yum instalou uma nova versão incompatível do Postgres? É assim que rolamos no mundo do Linux? Principais atualizações sem avisos sobre o que isso implica ou pedindo minha permissão? Foowee, vou ser mais cuidadoso da próxima vez. Aliás, o que eu deveria ter feito se tivesse meu tempo novamente?

De qualquer forma, isso me levou a esses links e, claro, os documentos do postgres. Estou preso agora em executar o pg_upgrade. Aqui está o meu comando até agora:

pg_upgrade -d /pgdata_temp -D /pgdata -b /usr/lib64/pgsql/postgresql-9.1/bin/ -B /??/ -v

Como descubro onde o novo diretório bin do Postgres está (para o argumento / B)? Não parece estar em lugar algum. E ainda assim, quando corri

su - postgres

initdb -D /pgdata -E UTF8

cat /pgdata/PG_VERSION

... anteriormente, eu tenho "9,2".

Qualquer ajuda seria muito apreciada. Talvez eu apenas reverter para 9.1? Essa é minha melhor estratégia? Então, como evito atualizações quando executo a atualização do yum na próxima vez? Ou então, estou feliz em atualizar, mas como faço isso e atualizo meu banco de dados existente para o 9.2.3?

Obrigado!

EDIT: Eu decidi que minha próxima melhor opção era abandonar 9.1 e meu banco de dados (eu tinha uma cópia dos dados no formato CSV), e reconstruir um banco de dados 9.2 do zero com os scripts que mantive na versão 9.1 inicial. / p>

sudo su -
cd /pgdata
rm -fr * .* (delete everything in /pgdata from 9.1 database - I kept a backup first)
su - postgres
initdb -D /pgdata -E UTF

Edite o postgresql.conf e o pg_hba.conf e inicie o servidor.

Ainda não faço ideia

  • onde o yum coloca os binários da versão 9.2 - e ainda o binário 9.1 diretório ainda existe
  • como obter service postgresql upgrade trabalhando

Mas depois de dias de pesquisas no Google e de inatividade do servidor, eu não me importo mais.

    
por poshest 08.03.2013 / 17:43

1 resposta

4

A atualização não intencional é a falha de empacotamento da Amazon. As outras distribuições Linux normalmente não quebram o PostgreSQL ao atualizar.

Para sair dessa confusão, veja essa entrada em suas Perguntas frequentes :

What steps do I take to upgrade from PostgreSQL 9.1 to 9.2?

PostgreSQL 9.2 offers important new features and performance improvements and it has been included in the Amazon Linux AMI 2012.09 release based on customer requests.

After upgrading PostgreSQL from 9.1 to 9.2, the database service will no longer start. This happens because the 9.1 version of the database format is not immediately usable with the 9.2 server. We have provided the postgresql-upgrade package as an automatic install alongside the latest release of postgresql 9.2. This allows you to perform an in-place upgrade on your database using service postgresql upgrade.

Behind the scenes, this runs pg_upgrade to migrate your database to the new format. Note that the upgrade will reset configuration files such as pg_hba.conf to a clean state. Your old configuration files are stored in /var/lib/pgsql9/data-old, and can be copied over the default files in /var/lib/pgsql9/data after your review.

Once the upgrade is finished and the configuration files are restored, the service should start normally.

    
por 08.03.2013 / 20:45