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.
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.
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) :
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 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 PostgreSQL
Mova novos dados para o local:
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
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 trilhos
gem uninstall pg
gem install pg
Sugiro 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.
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 executando bundle
.
brew
agora também tem a opção de usar brew services stop postgresql
e, em brew services start postgresql
vez de chamar diretamente launchctl unload
e launchctl 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
de 5432
para 5433
;cd
para a nova bin
pasta da versão ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
ou pg_hba.conf
), seria necessário replicar manualmente essas alterações na nova instalação. Em vez disso, se você usar pg_upgradecluster
, os arquivos de configuração
pg_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
sudo /etc/init.d/postgresql stop
Crie um novo arquivo chamado /etc/apt/sources.list.d/pgdg.list e adicione a linha abaixo
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, basta atualizá-lo como abaixo
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
É isso aí. O cluster mais atualizado será executado na porta número 5433. Verifique com o comando abaixo
sudo pg_lsclusters
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
e 10
, onde 9.6
está a versão antiga e 10
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):
sudo apt install postgresql-9.6
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:
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
Pare as duas instâncias do servidor (isso irá parar as duas ao mesmo tempo):
sudo systemctl stop postgresql
Alterne para o usuário dedicado do sistema PostgreSQL:
su postgres
Mova-se para o diretório pessoal (a falha ao fazer isso causará erros):
cd ~
pg_upgrade
requer as seguintes entradas ( pg_upgrade --help
nos diz isso):
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)
Essas entradas podem ser especificadas com "nomes longos", para facilitar a visualização:
-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
Também devemos passar o --new-options
comutador, porque a falha ao fazer isso 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"?
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:
/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 usuário do sistema dedicada:
exit
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):
systemctl start postgresql
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:
port = 5432
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á-lo apt --purge remove postgresql-9.5
para que isso acontecesse ):
apt remove postgresql-9.5
O comando acima interromperá todas as instâncias, portanto, você precisará iniciar a nova instância uma última vez com:
systemctl start postgresql
Como observação final, não se esqueça de considerar pg_upgrade
os bons conselhos:
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
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ão sudo mkdir /foobar
com chmod 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:
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 avançados do postgres, mas funcionou perfeitamente para mim.
O manual do usuário aborda esse tópico em profundidade. Você pode:
pg_upgrade
no lugar; ou
pg_dump
e pg_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.
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:
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
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?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
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:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
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.
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#Quickstart
No Windows, eu continuava enfrentando diferentes mensagens de erro ao tentar usar pg_upgrade
.
Economizou muito tempo para eu apenas:
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:
sudo -u postgres psql postgres
Após digitar a senha, execute no terminal postgres:
SHOW SERVER_VERSION;
Ele produzirá algo como:
server_version
----------------
9.4.5
Para definir e iniciar o postgres, usei o comando:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
E, em seguida, para restaurar o banco de dados de um arquivo:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
Ou, se não funcionar, tente com este:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
E se você estiver usando Rails, faça um bundle exec rake db:migrate
após puxar o código :)
Para Mac via homebrew:
brew tap petere/postgresql
,
brew install <formula>
(por exemplo brew 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
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 usando pg11
.
Navegue para, em C:\PostgreSQL\data\pg11
seguida, abra a postgresql.conf
edição port = 5433
paraport = 5432
É isso aí. Abra cmd e digitepsql -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
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
arquivo d:\postgresql\12\data
e mude port = 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 11
4) Execute a atualização digitando 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
(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”
Eu acho que esse é o melhor link para sua solução atualizar o postgres para 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/