Como atualizar o PostgreSQL da versão 9.6 para a versão 10.1 sem perder dados?

Estou a usar a base de dados PostgreSQL para a minha aplicação Ruby on Rails (no Mac OS X 10.9).

Existem instruções detalhadas sobre como actualizar a base de dados PostgreSQL?

Receio destruir os dados da base de dados ou estragá-los.

Author: Donovan, 2014-06-24

15 answers

Assumindo que usou o home-brew para instalar e actualizar os Postgres, poderá executar os seguintes passos.

  1. Parar o servidor de Postgres actual:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. Inicializar uma nova base de dados 10.1:

    initdb /usr/local/var/postgres10.1 -E utf8

  3. Corre.pg_upgrade ( nota: mude a versão do bin se você estiver atualizando de algo diferente do que abaixo):

    pg_upgrade -v \
        -d /usr/local/var/postgres \
        -D /usr/local/var/postgres10.1 \
        -b /usr/local/Cellar/postgresql/9.6.5/bin/ \
        -B /usr/local/Cellar/postgresql/10.1/bin/
    

    -v para activar o registo interno descritivo

    -d a base de dados antiga pasta de configuração do agregado

    -D o novo directório de configuração do conjunto de bases de Dados

    -b a pasta antiga do executável PostgreSQL

    -B a nova pasta executável PostgreSQL

  4. Mover novos dados para o lugar:

    cd /usr/local/var
    mv postgres postgres9.6
    mv postgres10.1 postgres
    
  5. Reiniciar Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  6. Verifique /usr/local/var/postgres/server.log os detalhes e certifique-se que o novo servidor foi iniciado correctamente.

  7. Finalmente, reinstalem os carris. pg gem
    gem uninstall pg
    gem install pg
    

Eu sugiro que você tome algum tempo para ler a documentaçãoPostgreSQL para entender exatamente o que você está fazendo nos passos acima para minimizar frustrações.

 405
Author: Donovan, 2019-07-19 14:35:40
Apesar de todas as respostas acima, aqui vão os meus 5 cêntimos.

Funciona em qualquer SO e de qualquer versão postgres.

  • parar qualquer instância de postgres em execução;
  • instale a nova versão e inicie-a; Verifique se pode ligar-se também à nova versão;
  • Alterar a versão antigapostgresql.conf -> port de 5432 a 5433;
  • iniciar a instância postgres da versão antiga;
  • Abra um terminal e cd para a nova versão bin pasta;
  • corre. pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
  • parar a instância antiga de execução dos postgres;
 61
Author: Christian, 2019-10-06 18:11:10

Aqui está a solução para os utilizadoresdo Ubuntu

Primeiro temos de parar o postgresql.
sudo /etc/init.d/postgresql stop

Crie um novo ficheiro chamado /etc/apt / sources.lista.d / pgdg.listar e adicionar abaixo da linha

deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main

Siga os comandos abaixo

wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main 
sudo /etc/init.d/postgresql start
Agora temos tudo, só temos de o actualizar como abaixo de
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
É isso. A maioria dos clusters atualizados funcionarão na porta número 5433. Verifique-o com o comando abaixo
sudo pg_lsclusters
 57
Author: pramod, 2018-10-25 08:47:48

Se está a utilizar os Serviços homebrew e homebrew, pode provavelmente fazer:

brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Eu acho que isso pode não funcionar completamente se você estiver usando recursos Postgres avançados, mas funcionou perfeitamente para mim.
 17
Author: jnmandal, 2018-01-30 01:18:15

Atualização: Este processo é o mesmo para atualizar 9.5 através de, pelo menos 11.5; basta modificar os comandos para refletir versões 9.6 e 10, onde 9.6 é idade versão e 10 é novo versão. Certifique-se de ajustar os diretórios "Velho" E "Novo" em conformidade, também.


Acabei de actualizar o PostgreSQL 9.5 para 9.6 no Ubuntu e pensei em partilhar as minhas descobertas, uma vez que existem algumas nuances específicas do sistema operacional/pacote que devem ser ciente.

(Eu não queria ter que despejar e restaurar os dados manualmente, então várias das outras respostas aqui não eram viáveis.)

Em resumo, o processo consiste em instalar a nova versão do PostgreSQL juntamente com a versão antiga (por exemplo, 9.5 e 9.6) e, em seguida, executar o pg_upgrade binário, o que é explicado em (alguns) detalhe em https://www.postgresql.org/docs/9.6/static/pgupgrade.html .

O único aspecto "complicado" de {[19] } é que a falha em passar o valor correto para um argumento, ou falha em ser logado como o usuário correto ou cd para o local correto antes de executar um comando, pode levar a mensagens de erro críptico.

No Ubuntu( e provavelmente no Debian), desde que esteja a usar o repo "oficial", deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main, e desde que não tenha alterado os caminhos predefinidos do sistema de ficheiros ou as opções de execução, o procedimento a seguir deverá fazer o trabalho.

Instale a nova versão (note que especificamos o 9.6, explicitamente):

sudo apt install postgresql-9.6
Uma vez que a instalação tenha sucesso, ambas as versões estarão rodando lado a lado, mas em diferentes portos. A saída da instalação menciona isso, na parte inferior, mas é fácil ignorar:
Creating new cluster 9.6/main ...
  config /etc/postgresql/9.6/main
  data   /var/lib/postgresql/9.6/main
  locale en_US.UTF-8
  socket /var/run/postgresql
  port   5433

Parar ambas as instâncias do servidor (isto irá parar ambas ao mesmo tempo):

sudo systemctl stop postgresql

Muda para o utilizador específico do sistema PostgreSQL:

su postgres

Mova - se para a sua pasta pessoal (se não o fizer, irá causar erros):

cd ~

pg_upgrade requer {[39] } as seguintes entradas (pg_upgrade --help diz - nos isto):

When you run pg_upgrade, you must provide the following information:
  the data directory for the old cluster  (-d DATADIR)
  the data directory for the new cluster  (-D DATADIR)
  the "bin" directory for the old version (-b BINDIR)
  the "bin" directory for the new version (-B BINDIR)

Estas entradas podem ser especificadas com "nomes longos", para torná-las mais fáceis de visualizar:

  -b, --old-bindir=BINDIR       old cluster executable directory
  -B, --new-bindir=BINDIR       new cluster executable directory
  -d, --old-datadir=DATADIR     old cluster data directory
  -D, --new-datadir=DATADIR     new cluster data directory

Nós também devemos passar o interruptor --new-options, porque a falha em fazê-lo resulta no seguinte:

connection to database failed: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?

Isto ocorre porque as opções de configuração predefinidas são aplicadas na ausência deste interruptor, o que resulta na utilização de opções de ligação incorrectas, daí o erro do 'socket'.

Executar o comando pg_upgrade do novo versão PostgreSQL:

/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf

Logout da conta de utilizador do sistema:

exit

A actualização está agora completa, mas , a nova instância irá ligar-se à porta 5433 (o padrão é 5432), por isso tenha isto em mente se tentar testar a nova instância antes de "cortar" para ela.

Iniciar o servidor como normal (mais uma vez, Isto irá iniciar tanto as instâncias antigas como as novas):

systemctl start postgresql

Se quiseres fazer a nova versão por omissão, você precisará editar o arquivo de configuração efetiva, por exemplo, /etc/postgresql/9.6/main/postgresql.conf, e garantir que a porta seja definida como tal:

port = 5432

Se você fizer isso, altere a versão antiga do número de porta para 5433 ao mesmo tempo (antes de iniciar os serviços), ou, simplesmente remova a versão antiga (isto não remover o seu real conteúdo de banco de dados; você precisa usar apt --purge remove postgresql-9.5 para que isso aconteça):

apt remove postgresql-9.5

O comando acima irá parar todas as instâncias, por isso você vai precisar começar a nova instância uma última vez com:

systemctl start postgresql

Como ponto final da nota, não se esqueça de considerar pg_upgrade ' S bom conselho:

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    ./analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
 16
Author: Ben Johnson, 2019-10-17 19:36:25

O manual do utilizador abrange este tópico em profundidade. Você pode:

  • pg_upgrade no local; ou

  • pg_dump e pg_restore

Se em dúvida, fá-lo com lixeiras. Não apague o diretório de dados antigo, basta mantê-lo no caso de algo correr mal / você comete um erro; dessa forma você pode apenas voltar para a sua instalação 9.3 inalterada.

Para mais pormenores, consulte o manual.

Se estiver preso, coloque uma pergunta detalhada explicando como está preso, onde, e o que tentaste primeiro. Depende um pouco de como você instalou PostgreSQL também, como existem várias "distribuições" diferentes de PostgreSQL para OS X (infelizmente). Tens de dar essa informação.
 13
Author: Craig Ringer, 2014-06-24 06:51:38
De pé sobre os ombros das outras pobres criaturas que passavam por esta lama, consegui seguir estes passos para voltar a subir e correr depois de uma actualização para Yosemite.

Assumindo que usou o home-brew para instalar e actualizar os Postgres, poderá executar os seguintes passos.

  1. Parar o servidor de Postgres actual:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. Inicializar uma nova base de dados 9.4:

    initdb /usr/local/var/postgres9.4 -E utf8

  3. Instalar postgres 9, 3 (como já não estava presente na minha máquina):

    brew install homebrew/versions/postgresql93

  4. Adicionar pastas removidas durante a actualização do Yosemite:

    mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep

  5. Corre.pg_upgrade:

    pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/

  6. Mover novos dados para o lugar:

    cd /usr/local/var
    mv postgres postgres9.3
    mv postgres9.4 postgres
    
  7. Reiniciar Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  8. Verifique /usr/local/var/postgres/server.log os detalhes e certifique-se que o novo servidor foi iniciado correctamente.

  9. Finalmente, reinstalar bibliotecas relacionadas?
    pip install --upgrade psycopg2
    gem uninstall pg
    gem install pg
    
 8
Author: Josh, 2015-08-17 17:34:11
Parece que a solução foi cozida em Homebrew agora.
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database
....
 5
Author: Steven Shaw, 2018-01-24 06:07:34
Isto fê-lo por mim.

Https://gist.github.com/dideler/60c9ce184198666e5ab4

Curto e directo. Sinceramente, não quero entender as entranhas do PostgreSQL, quero fazer as coisas.

 1
Author: dimitarvp, 2014-12-31 11:43:49

Em janelas {[4] } continuei a enfrentar mensagens de erros diferentes ao tentar usar {[[0]}.

Poupei muito tempo para eu ...
  1. cópia de segurança DB
  2. desinstalar todas as cópias do PostgreSQL
  3. instalar 9, 5
  4. restaurar DB
 1
Author: Andrew, 2017-01-25 15:19:23
A minha solução era combinar estes dois recursos:

Https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d

E

Http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4

O segundoUm {22]} ajudou mais depois o primeiro. Também para Não, Não siga os passos como alguns não são necessários. Além disso, se você não está sendo capaz de backup dos dados via consola postgres, você pode usar alternativa aproxima-te e faz o backup com o pgAdmin 3 ou outro programa, como fiz no meu caso.

Também a ligação: https://help.ubuntu.com/stable/serverguide/postgresql.html Ajudou a definir a senha criptografada e definir md5 para autenticar o usuário postgres.

Afinal de contas está feito, para verificar a versão postgres server executada no terminal:

sudo -u postgres psql postgres

Depois de introduzir a senha executada no terminal postgres:

SHOW SERVER_VERSION;
Vai produzir alguma coisa. tipo:
 server_version 
----------------
 9.4.5

Para definir e iniciar os postgres, usei o comando:

> sudo bash # root
> su postgres # postgres

> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop

E depois para restaurar a base de dados de um ficheiro:

> psql -f /home/ubuntu_username/Backup_93.sql postgres

Ou se não funcionar, tenta com este:

> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump

E se estiver a usar Carris faça um bundle exec rake db:migrate depois de puxar o código:)

 0
Author: Aleks, 2015-12-24 12:39:50

Para Mac via homebrew:

brew tap petere/postgresql,

brew install <formula> (eg: brew install petere/postgresql/postgresql-9.6)

Remover os Postgres antigos:

brew unlink postgresql

brew link -f postgresql-9.6

Se algum erro acontecer, não se esqueça de ler e seguir as instruções do brew em cada passo.

Vê isto para mais: https://github.com/petere/homebrew-postgresql

 0
Author: ThangTD, 2017-11-25 22:49:00

No Windows 10 desde que tinha o MPN, instalei o pacote rimraf. npm install rimraf -g

Faça Backup de todas as suas bases de dados um por um usando o comando pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname

Depois instalou a última versão PostgreSQL, ou seja, 11.2, o que me levou a usar a porta 5433 desta vez.

Seguido de desinstalação de versões mais antigas da mina PostgreSQL foi 10. Repare que o desinstalador pode dar um aviso de não apagar a pasta C:\PostgreSQL\10\data. É por isso que temos o próximo passo usando rimraf para apagar permanentemente a pasta e é sub-pastas.

Muda para a pasta de instalação do PostgreSQL e executa o comando rimraf 10. 10 é um nome de diretório. Note use a sua versão mais antiga do PostgreSQL, ou seja, 9.5 ou algo assim.

Agora adicionar C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib nas variáveis ambientais do Windows. Note que a minha nova versão instalada é 11, por isso estou a usar pg11.

Navegar para C:\PostgreSQL\data\pg11 depois abrir postgresql.conf editar port = 5433 para port = 5432

É isso. Abrir cmd e tipo psql -U postgres Agora pode restaurar todas as suas bases de dados com suporte uma por um a usar o comando pg_restore -U $username --dbname=$databasename $filename
 0
Author: STREET MONEY, 2019-04-23 08:05:40

A minha solução para actualizar do Postgresql 11 para o Postgresql 12 no Windows 10 é a seguinte.

Como primeira observação, terá de ser capaz de parar e iniciar o serviço Postgresql. Você pode fazer isso pelos seguintes comandos em Powershell.

Começar: pg_ctl start -D “d:\postgresql\11\data”

Pára.: pg_ctl stop -D “d:\postgresql\11\data”

Situação: pg_ctl status -D “d:\postgresql\11\data”

Seria sensato fazer um backup antes de fazer o upgrade. A instância Postgresql 11 deve estar em execução. Então para copiar os globais do

pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql

E depois para cada base de Dados

pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc

Ou

pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc

Se ainda não estiver pronto, instale o Postgresql 12 (como o Postgresql 11 também está instalado, este será no Porto 5433)

Depois fazer a actualização da seguinte forma:

1) parar o serviço Postgresql 11 (ver acima)

2) editar o ficheiro postgresql.conf em d:\postgresql\12\data e alterar port = 5433 para port = 5432

3) Edite a localização do ambiente de utilizador do windows (windows start depois escreva env) para ponto para Postgresql 12 em vez de Postresql 11

4) Execute a actualização, indicando o seguinte comando.

pg_upgrade `
-b “c:\program files\postgresql\11\bin” `
-B “c:\program files\postgresql\12\bin” `
-d “d:\postgresql\11\data” `
-D “d:\postgresql\12\data” --username=postgres

(em powershell use backtick (ou backquote) ` para continuar o comando na próxima linha)

E finalmente iniciar o novo serviço Postgresql 12

pg_ctl start -D “d:\postgresql\12\data”

 0
Author: Bruno Vermeulen, 2020-05-26 12:38:30

Acho que esta é a melhor ligação para a sua solução actualizar os postgres para 9, 6

https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/
 -1
Author: zulqarnain nazir, 2017-10-11 08:55:19