Estou usando o banco de dados PostgreSQL para meu aplicativo Ruby on Rails (no Mac OS X 10.9).
Existem instruções detalhadas sobre como atualizar o banco de dados PostgreSQL?
Receio destruir os dados no banco de dados ou estragar tudo.
postgresql
upgrade
user3675188
fonte
fonte
Respostas:
Supondo que você tenha usado o home-brew para instalar e atualizar o Postgres, você pode executar as seguintes etapas.
Pare o servidor Postgres atual:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inicialize um novo banco de dados 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
execute
pg_upgrade
(nota: altere a versão do compartimento se estiver atualizando de algo diferente do que abaixo) :-v
para habilitar o log interno detalhado-d
o antigo diretório de configuração do cluster de banco de dados-D
o novo diretório de configuração do cluster de banco de dados-b
o antigo diretório executável do PostgreSQL-B
o novo diretório executável do PostgreSQLMova novos dados para o local:
Reinicie o Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Verifique os
/usr/local/var/postgres/server.log
detalhes e verifique se o novo servidor foi iniciado corretamente.Por fim, reinstale a
pg
gema de trilhosSugiro que você reserve um tempo para ler a documentação do PostgreSQL para entender exatamente o que está fazendo nas etapas acima para minimizar frustrações.
fonte
initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
delete_old_cluster.sh
comando. Primeiro, excluí manualmente os diretórios /usr/local/postgres9.3, depois executei este comando e parece que perdi todo o diretório / usr / local / var / postgres (consegui restaurá-lo no Time Machine)gem uninstall pg
mas deixe o bundler reinstalar a versão correta do Gemfile.lock simplesmente executandobundle
.brew
agora também tem a opção de usarbrew services stop postgresql
e, embrew services start postgresql
vez de chamar diretamentelaunchctl unload
elaunchctl load
.Apesar de todas as respostas acima, aqui estão meus 5 centavos.
Funciona em qualquer sistema operacional e a partir de qualquer versão do postgres.
postgresql.conf
->port
de5432
para5433
;cd
para a novabin
pasta da versão ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
fonte
postgresql.conf
oupg_hba.conf
), seria necessário replicar manualmente essas alterações na nova instalação. Em vez disso, se você usarpg_upgradecluster
, os arquivos de configuraçãopg_dumpall: could not connect to database "XXX": fe_sendauth: no password supplied
Current releases of the dump programs can read data from any server version back to 7.0.
Aqui está a solução para usuários do Ubuntu
Primeiro temos que parar o postgresql
Crie um novo arquivo chamado /etc/apt/sources.list.d/pgdg.list e adicione a linha abaixo
Siga os comandos abaixo
Agora temos tudo, basta atualizá-lo como abaixo
É isso aí. O cluster mais atualizado será executado na porta número 5433. Verifique com o comando abaixo
fonte
Atualização : esse processo é o mesmo para atualizar 9.5 a pelo menos 11.5; simplesmente modifique os comandos para refletir as versões
9.6
e10
, onde9.6
está a versão antiga e10
a nova versão. Certifique-se de ajustar também os diretórios "antigo" e "novo".Acabei de atualizar o PostgreSQL 9.5 para 9.6 no Ubuntu e pensei em compartilhar minhas descobertas, pois há algumas nuances específicas de SO / pacote que você deve conhecer.
( Eu não queria despejar e restaurar dados manualmente , portanto, várias das outras respostas aqui não eram viáveis.)
Em resumo, o processo consiste em instalar a nova versão do PostgreSQL ao lado da versão antiga (por exemplo, 9.5 e 9.6) e depois executar o
pg_upgrade
binário, o que é explicado em (alguns) detalhes em https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .O único aspecto "complicado"
pg_upgrade
é que a falha em passar o valor correto para um argumento ou a falha no logon como o usuário correto oucd
no local correto antes da execução de um comando podem levar a mensagens de erro enigmáticas.No Ubuntu (e provavelmente no Debian), desde que você esteja usando o repositório "oficial",
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
e não alterando os caminhos padrão do sistema de arquivos ou as opções de tempo de execução, o procedimento a seguir deve fazer o trabalho.Instale a nova versão (observe que especificamos
9.6
explicitamente):Depois que a instalação for bem-sucedida, as duas versões serão executadas lado a lado, mas em portas diferentes. A saída da instalação menciona isso, na parte inferior, mas é fácil ignorar:
Pare as duas instâncias do servidor (isso irá parar as duas ao mesmo tempo):
Alterne para o usuário dedicado do sistema PostgreSQL:
Mova-se para o diretório pessoal (a falha ao fazer isso causará erros):
pg_upgrade
requer as seguintes entradas (pg_upgrade --help
nos diz isso):Essas entradas podem ser especificadas com "nomes longos", para facilitar a visualização:
Também devemos passar o
--new-options
comutador, porque a falha ao fazer isso resulta no seguinte:Isso ocorre porque as opções de configuração padrão são aplicadas na ausência dessa opção, o que resulta no uso de opções de conexão incorretas, daí o erro do soquete.
Execute o
pg_upgrade
comando da nova versão do PostgreSQL:Logout da conta de usuário do sistema dedicada:
A atualização está concluída agora, mas a nova instância será vinculada à porta
5433
(o padrão padrão é5432
), portanto, lembre-se disso se tentar testar a nova instância antes de "cortá-la".Inicie o servidor normalmente (novamente, isso iniciará as instâncias antiga e nova):
Se você deseja tornar a nova versão o padrão, será necessário editar o arquivo de configuração efetivo, por exemplo
/etc/postgresql/9.6/main/postgresql.conf
, e garantir que a porta esteja definida da seguinte maneira:Se você fizer isso, altere o número da porta da versão antiga para
5433
ao mesmo tempo (antes de iniciar os serviços) ou simplesmente remova a versão antiga (isso não removerá o conteúdo real do banco de dados; você precisaria usá-loapt --purge remove postgresql-9.5
para que isso acontecesse ):O comando acima interromperá todas as instâncias, portanto, você precisará iniciar a nova instância uma última vez com:
Como observação final, não se esqueça de considerar
pg_upgrade
os bons conselhos:fonte
sudo su postgres
, mudar tudo MÉTODO em pg_hba.conf tanto de instalação para a confiança antes pg_upgrade, correndo pg_upgrade in / / tmp privado não ~ não funcionou, entãosudo mkdir /foobar
comchmod 777 /foobar
e ele correu lá. Por fim, o comando pg_upgrade:/Library/PostgreSQL/9.5/bin/pg_upgrade -b /Library/PostgreSQL/9.2/bin -B /Library/PostgreSQL/9.5/bin -d /Library/PostgreSQL/9.2/data -D /Library/PostgreSQL/9.5/data -o -cconfig_file=/Library/PostgreSQL/9.2/data/postgresql.conf -O -cconfig_file=/Library/PostgreSQL/9.5/data/postgresql.conf
Se você estiver usando os serviços homebrew e homebrew, provavelmente poderá fazer:
Eu acho que isso pode não funcionar completamente se você estiver usando recursos avançados do postgres, mas funcionou perfeitamente para mim.
fonte
O manual do usuário aborda esse tópico em profundidade. Você pode:
pg_upgrade
no lugar; oupg_dump
epg_restore
.Em caso de dúvida, faça-o com lixões. Não exclua o diretório de dados antigo, apenas mantenha-o no caso de algo dar errado / você cometer um erro; Dessa forma, você pode voltar à sua instalação 9.3 inalterada.
Para detalhes, consulte o manual.
Se você estiver preso, poste uma pergunta detalhada explicando como está preso, onde e o que você tentou primeiro. Depende um pouco de como você instalou o PostgreSQL também, pois existem várias "distribuições" diferentes do PostgreSQL para OS X (infelizmente). Então, você precisará fornecer essas informações.
fonte
De pé sobre os ombros das outras pobres criaturas que pisavam nessa lama, pude seguir estas etapas para voltar a funcionar depois de uma atualização para Yosemite:
Supondo que você tenha usado o home-brew para instalar e atualizar o Postgres, você pode executar as seguintes etapas.
Pare o servidor Postgres atual:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inicialize um novo banco de dados 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
Instale o postgres 9.3 (como ele não estava mais presente na minha máquina):
brew install homebrew/versions/postgresql93
Adicione diretórios removidos durante a atualizaçã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
executar
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/
Mova novos dados para o local:
Reinicie o Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Verifique os
/usr/local/var/postgres/server.log
detalhes e verifique se o novo servidor foi iniciado corretamente.Por fim, reinstale as bibliotecas relacionadas?
fonte
brew cleanup
antes da migração de dados e isso causou a desinstalação do postgres9.3. Isso ajudou. :)Parece que a solução foi incorporada ao Homebrew agora:
fonte
Isso fez por mim.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Curto e direto ao ponto. Sinceramente, não pretendo entender as entranhas do PostgreSQL, quero fazer as coisas.
fonte
jessie
. Tinha mais de 10 bancos de dados e uma quantidade de ~ 400 MB de dados do banco de dados foi convertida em um piscar de olhos. Então, novamente, eu estou usando um Debian virtual em um SSD.pg_upgradecluster 9.4 main
mas recebo o erro Erro:specified cluster does not exist
... Acho que preciso instalar o postgresql-9.4 novamente primeiro com este guia: wiki.postgresql.org/wiki/Apt#QuickstartNo Windows, eu continuava enfrentando diferentes mensagens de erro ao tentar usar
pg_upgrade
.Economizou muito tempo para eu apenas:
fonte
Minha solução foi fazer uma combinação desses dois recursos:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
e
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
O segundo um ajudou mais , em seguida, o primeiro. Além disso, não siga as etapas como estão, pois algumas não são necessárias. Além disso, se você não conseguir fazer backup dos dados via console do postgres, poderá usar uma abordagem alternativa e fazer backup deles com o pgAdmin 3 ou algum outro programa, como fiz no meu caso.
Além disso, o link: https://help.ubuntu.com/stable/serverguide/postgresql.html Ajudou a definir a senha criptografada e definir o md5 para autenticar o usuário do postgres.
Depois de tudo feito, para verificar a
server
versão do postgres, execute o terminal:Após digitar a senha, execute no terminal postgres:
Ele produzirá algo como:
Para definir e iniciar o postgres, usei o comando:
E, em seguida, para restaurar o banco de dados de um arquivo:
Ou, se não funcionar, tente com este:
E se você estiver usando Rails, faça um
bundle exec rake db:migrate
após puxar o código :)fonte
Para Mac via homebrew:
brew tap petere/postgresql
,brew install <formula>
(por exemplobrew install petere/postgresql/postgresql-9.6
:)Remova Postgres antigos:
brew unlink postgresql
brew link -f postgresql-9.6
Se ocorrer algum erro, não se esqueça de ler e seguir as instruções de preparação em cada etapa.
Verifique isso para mais: https://github.com/petere/homebrew-postgresql
fonte
No Windows 10 desde que eu tinha o npm, instalei o pacote rimraf.
npm install rimraf -g
Faça backup de todos os seus bancos de dados um por um usando o comando
pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Em seguida, instalei a versão mais recente do PostgreSQL, isto é, a 11.2, que me levou a usar a porta 5433 neste momento.
Seguido por Desinstalação de versões mais antigas do PostgreSQL, a mina era 10. Observe que o desinstalador pode dar um aviso de não excluir a pasta
C:\PostgreSQL\10\data
. É por isso que temos o próximo passo usando o rimraf para excluir permanentemente a pasta e suas subpastas.mude para o diretório de instalação do PostgreSQL e execute o comando
rimraf 10
. 10 é um nome de diretório. Nota: use sua versão mais antiga do PostgreSQL, isto é, 9.5 ou algo assim.Agora adicione
C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
nas variáveis ambientais do Windows. Observe que minha nova versão instalada é 11, portanto, por que estou usandopg11
.Navegue para, em
C:\PostgreSQL\data\pg11
seguida, abra apostgresql.conf
ediçãoport = 5433
paraport = 5432
É isso aí. Abra cmd e digite
psql -U postgres
Agora você pode restaurar todos os seus bancos de dados de backup um por um usando o comando
pg_restore -U $username --dbname=$databasename $filename
fonte
Minha solução para atualizar do Postgresql 11 para o Postgresql 12 no Windows 10 é a seguinte.
Como primeira observação, você deverá poder parar e iniciar o serviço Postgresql. Você pode fazer isso seguindo os seguintes comandos no Powershell.
Começar:
pg_ctl start -D “d:\postgresql\11\data”
Pare:
pg_ctl stop -D “d:\postgresql\11\data”
Estado:
pg_ctl status -D “d:\postgresql\11\data”
Seria sensato fazer um backup antes de fazer a atualização. A instância do Postgresql 11 deve estar em execução. Então, para copiar os globais
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
e depois para cada banco 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, isso estará na porta 5433)
Em seguida, faça a atualização da seguinte maneira:
1) Interrompa o serviço Postgresql 11 (veja acima)
2) Edite o
postgresql.conf
arquivod:\postgresql\12\data
e mudeport = 5433
paraport = 5432
3) Edite o caminho do ambiente de usuário do Windows (
windows start
digiteenv
) para apontar para Postgresql 12 em vez de Postresql 114) Execute a atualização digitando o seguinte comando.
(No PowerShell, use backtick (ou backquote) `para continuar o comando na próxima linha)
5) e finalmente inicie o novo serviço Postgresql 12
pg_ctl start -D “d:\postgresql\12\data”
fonte
Eu acho que esse é o melhor link para sua solução atualizar o postgres para 9.6
fonte