stable - ¿Cómo actualizar PostgreSQL de la versión 9.6 a la versión 10.1 sin perder datos?
upgrade postgresql 9.4 to 9.6 windows (13)
A pesar de todas las respuestas anteriores, aquí va mi 5 centavos.
Funciona en cualquier sistema operativo y en cualquier versión postgres.
- Detener cualquier instancia de postgres en ejecución;
- Instala la nueva versión y comienza; Compruebe si puede conectarse a la nueva versión también;
- Cambie el
port
postgresql.conf
-> de la versión anterior de5432
a5433
; - Inicie la versión anterior de la instancia de postgres;
- Abra una terminal y un CD en la carpeta de la nueva versión
bin
; - Ejecute
pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
- Detener la vieja instancia de ejecución de Postgres;
Estoy usando la base de datos PostgreSQL para mi aplicación Ruby on Rails (en Mac OS X 10.9).
¿Hay alguna instrucción detallada sobre cómo actualizar la base de datos PostgreSQL?
Me temo que destruiré los datos en la base de datos o lo estropearé.
Aquí está la solución para los usuarios de Ubuntu
Primero tenemos que dejar de postgresql
sudo /etc/init.d/postgresql stop
Crea un nuevo archivo llamado /etc/apt/sources.list.d/pgdg.list y agrega la siguiente línea
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Sigue los comandos a continuación
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
Ahora tenemos todo, solo necesitamos actualizarlo como se muestra a continuación
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
Eso es. El clúster mayormente actualizado se ejecutará en el puerto número 5433. Verifíquelo con el comando debajo
sudo pg_lsclusters
Asumiendo que ha usado home-brew para instalar y actualizar Postgres, puede realizar los siguientes pasos.
Detener el servidor actual de Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inicializa una nueva base de datos 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
ejecute
pg_upgrade
(nota: cambie la versión del bin si está actualizando desde algo que no sea más abajo) :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/
Mover datos nuevos a su lugar:
cd /usr/local/var mv postgres postgres9.6 mv postgres10.1 postgres
Reiniciar Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Consulte
/usr/local/var/postgres/server.log
para obtener más información y asegurarse de que el nuevo servidor se haya iniciado correctamente.Finalmente, reinstale los rieles
pg
joyagem uninstall pg gem install pg
Le sugiero que se tome un tiempo para leer la documentación de PostgreSQL para comprender exactamente lo que está haciendo en los pasos anteriores para minimizar las frustraciones.
Creo que este es el mejor enlace para su solución para actualizar Postgres a 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/
De pie sobre los hombros de las otras criaturas pobres que atraviesan esta porquería, pude seguir estos pasos para volver a funcionar después de una actualización a Yosemite:
Asumiendo que ha usado home-brew para instalar y actualizar Postgres, puede realizar los siguientes pasos.
Detener el servidor actual de Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inicializa una nueva base de datos 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
Instalar postgres 9.3 (ya que ya no estaba presente en mi máquina):
brew install homebrew/versions/postgresql93
Agregar directorios eliminados durante la actualización de 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
ejecutar
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 datos nuevos a su lugar:
cd /usr/local/var mv postgres postgres9.3 mv postgres9.4 postgres
Reiniciar Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Consulte
/usr/local/var/postgres/server.log
para obtener más información y asegurarse de que el nuevo servidor se haya iniciado correctamente.Finalmente, reinstalar las bibliotecas relacionadas?
pip install --upgrade psycopg2 gem uninstall pg gem install pg
El manual del usuario cubre este tema en profundidad. Usted puede:
pg_upgrade
en el lugar; opg_dump
ypg_restore
.
Si tiene dudas, hágalo con vertederos. No borres el viejo directorio de datos, solo guárdalo en caso de que algo salga mal o te equivoques; de esa manera, puedes volver a tu instalación 9.3 sin cambios.
Para detalles, vea el manual.
Si está atascado, publique una pregunta detallada que explique cómo está atascado, dónde y qué intentó primero. Depende también de cómo instaló PostgreSQL, ya que hay varias "distribuciones" diferentes de PostgreSQL para OS X (desafortunadamente). Entonces necesitarías proporcionar esa información.
En Windows , seguí enfrentando diferentes mensajes de error cuando intentaba usar pg_upgrade
.
Ahorré mucho tiempo para que yo solo:
- Backup DB
- Desinstale todas las copias de PostgreSQL
- Instalar 9.5
- Restaurar DB
Esto lo hizo por mí.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Corto y al grano. Honestamente, no pretendo entender las agallas de PostgreSQL, quiero hacer cosas.
Mi solución fue hacer una combinación de estos dos recursos:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
y
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
El segundo ayudó más que el primero. Además, no siga los pasos, ya que algunos no son necesarios. Además, si no puede hacer una copia de seguridad de los datos a través de la consola postgres, puede usar un enfoque alternativo y hacer una copia de seguridad con pgAdmin 3 o algún otro programa, como lo hice en mi caso.
Además, el enlace: https://help.ubuntu.com/stable/serverguide/postgresql.html Ayudó a establecer la contraseña cifrada y establecer md5 para autenticar al usuario de postgres.
Después de todo, para verificar la versión del server
postgres ejecute en la terminal:
sudo -u postgres psql postgres
Después de ingresar la contraseña, ejecuta en la terminal de postgres:
SHOW SERVER_VERSION;
Saldrá algo así como:
server_version
----------------
9.4.5
Para configurar e iniciar postgres he utilizado el comando:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
Y luego para restaurar la base de datos de un archivo:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
O si no funciona, intente con este:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
Y si está utilizando Rails haga un bundle exec rake db:migrate
después de tirar el código :)
Para Mac a través de homebrew:
brew tap petere/postgresql
,
brew install <formula>
(por ejemplo: brew install petere/postgresql/postgresql-9.6
)
Eliminar el antiguo Postgres:
brew unlink postgresql
brew link -f postgresql-9.6
Si ocurre algún error, no olvide leer y seguir instrucciones brew en cada paso.
Mira esto para obtener más información: https://github.com/petere/homebrew-postgresql
Parece que la solución se ha horneado en Homebrew ahora:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Si está utilizando servicios homebrew y homebrew, probablemente pueda hacer lo siguiente:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Creo que esto podría no funcionar por completo si está utilizando funciones avanzadas de Postgres, pero funcionó perfectamente para mí.
Actualización : este proceso es el mismo para actualizar 9.6 a 10; simplemente modifique los comandos para reflejar las versiones 9.6
y 10
, donde 9.6
es la versión anterior y 10
es la nueva versión. Asegúrese de ajustar los directorios "antiguos" y "nuevos" en consecuencia, también.
Acabo de actualizar PostgreSQL 9.5 a 9.6 en Ubuntu y pensé en compartir mis hallazgos, ya que hay un par de matices específicos de SO / paquete de los cuales estar al tanto.
( No quería tener que volcar y restaurar datos manualmente , por lo que varias de las otras respuestas aquí no eran viables).
En resumen, el proceso consiste en instalar la nueva versión de PostgreSQL junto con la versión anterior (por ejemplo, 9.5 y 9.6), y luego ejecutar el binario pg_upgrade
, que se explica en (algunos) detalles en https://www.postgresql.org/docs/9.6/static/pgupgrade.html .
El único aspecto " pg_upgrade
" de pg_upgrade
es que si no se pasa el valor correcto para un argumento, o si no se pg_upgrade
sesión como el usuario o cd
correcto en la ubicación correcta antes de ejecutar un comando, se pueden generar mensajes de error crípticos.
En Ubuntu (y probablemente en Debian), siempre que esté utilizando el repositorio "oficial", deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
, y siempre que no haya cambiado el sistema de archivos predeterminado rutas de acceso o opciones de tiempo de ejecución, el siguiente procedimiento debería hacer el trabajo.
Instale la nueva versión (tenga en cuenta que especificamos el 9.6
, explícitamente):
sudo apt install postgresql-9.6
Una vez que la instalación tenga éxito, ambas versiones se ejecutarán una al lado de la otra, pero en diferentes puertos. El resultado de la instalación menciona esto, en la parte inferior, pero es fácil pasar por alto:
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
Detenga ambas instancias del servidor (esto se detendrá a la vez):
sudo systemctl stop postgresql
Cambie al usuario dedicado del sistema PostgreSQL:
su postgres
Múdate a su directorio de inicio (no hacer esto causará errores):
cd ~
pg_upgrade
requiere las siguientes entradas ( pg_upgrade --help
nos dice esto):
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 se pueden especificar con "nombres largos", para que sean más fáciles 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
También debemos pasar el --new-options
, porque al no hacerlo, se produce lo siguiente:
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"?
Esto ocurre porque las opciones de configuración predeterminadas se aplican en ausencia de este conmutador, lo que da como resultado el uso de opciones de conexión incorrectas, de ahí el error de socket.
Ejecute el comando pg_upgrade
desde la nueva versión de 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
Salir de la cuenta de usuario del sistema dedicado:
exit
La actualización ahora está completa, pero la nueva instancia se vinculará al puerto 5433
(el valor predeterminado estándar es 5432
), así que ten esto en cuenta si intentas probar la nueva instancia antes de "cortarlo".
Inicie el servidor como siempre (de nuevo, esto iniciará tanto las instancias antiguas como las nuevas):
systemctl start postgresql
Si desea que la nueva versión sea la predeterminada, deberá editar el archivo de configuración efectivo, por ejemplo, /etc/postgresql/9.6/main/postgresql.conf
, y asegurarse de que el puerto esté definido como tal:
port = 5432
Si hace esto, cambie el número de puerto de la versión anterior a 5433
al mismo tiempo (antes de comenzar los servicios), o simplemente elimine la versión anterior (esto no eliminará el contenido de su base de datos real; necesitará usar apt --purge remove postgresql-9.5
para que eso suceda):
apt remove postgresql-9.5
El comando anterior detendrá todas las instancias, por lo que deberá iniciar la nueva instancia por última vez con:
systemctl start postgresql
Como último punto a destacar, no olvide considerar los buenos consejos de pg_upgrade
:
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