Como atualizar o PostgreSQL da versão 9.6 para a versão 10.1 sem perder dados?
Existem instruções detalhadas sobre como actualizar a base de dados PostgreSQL?
Receio destruir os dados da base de dados ou estragá-los.15 answers
Assumindo que usou o home-brew para instalar e actualizar os Postgres, poderá executar os seguintes passos.
-
Parar o servidor de Postgres actual:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
-
Inicializar uma nova base de dados 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
-
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 -
Mover novos dados para o lugar:
cd /usr/local/var mv postgres postgres9.6 mv postgres10.1 postgres
-
Reiniciar Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Verifique
/usr/local/var/postgres/server.log
os detalhes e certifique-se que o novo servidor foi iniciado correctamente.-
Finalmente, reinstalem os carris.
pg
gemgem 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.
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 antiga
- iniciar a instância postgres da versão antiga;
- Abra um terminal e
cd
para a nova versãobin
pasta; - corre.
pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
- parar a instância antiga de execução dos postgres;
postgresql.conf
-> port
de 5432
a 5433
;
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
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.
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
O manual do utilizador abrange este tópico em profundidade. Você pode:
pg_upgrade
no local; oupg_dump
epg_restore
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.Assumindo que usou o home-brew para instalar e actualizar os Postgres, poderá executar os seguintes passos.
-
Parar o servidor de Postgres actual:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
-
Inicializar uma nova base de dados 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
-
Instalar postgres 9, 3 (como já não estava presente na minha máquina):
brew install homebrew/versions/postgresql93
-
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
-
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/
-
Mover novos dados para o lugar:
cd /usr/local/var mv postgres postgres9.3 mv postgres9.4 postgres
-
Reiniciar Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Verifique
/usr/local/var/postgres/server.log
os detalhes e certifique-se que o novo servidor foi iniciado correctamente.-
Finalmente, reinstalar bibliotecas relacionadas?
pip install --upgrade psycopg2 gem uninstall pg gem install pg
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Https://gist.github.com/dideler/60c9ce184198666e5ab4
Curto e directo. Sinceramente, não quero entender as entranhas do PostgreSQL, quero fazer as coisas.
Em janelas {[4] } continuei a enfrentar mensagens de erros diferentes ao tentar usar {[[0]}.
Poupei muito tempo para eu ...- cópia de segurança DB
- desinstalar todas as cópias do PostgreSQL
- instalar 9, 5
- restaurar DB
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:)
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
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
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
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”
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”
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/