Estoy usando la base de datos PostgreSQL para mi aplicación Ruby on Rails (en Mac OS X 10.9).
¿Hay instrucciones detalladas sobre cómo actualizar la base de datos PostgreSQL?
Me temo que destruiré los datos en la base de datos o los estropearé.
Estoy usando la base de datos PostgreSQL para mi aplicación Ruby on Rails (en Mac OS X 10.9).
¿Hay instrucciones detalladas sobre cómo actualizar la base de datos PostgreSQL?
Me temo que destruiré los datos en la base de datos o los estropearé.
Respuestas:
Suponiendo que ha utilizado 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
Inicialice una nueva base de datos 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
ejecutar pg_upgrade
(nota: cambie la versión de bin si está actualizando desde algo diferente a lo siguiente) :
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 el registro interno detallado
-d
el antiguo directorio de configuración del clúster de base de datos
-D
el nuevo directorio de configuración del clúster de base de datos
-b
el antiguo directorio ejecutable de PostgreSQL
-B
el nuevo directorio ejecutable de PostgreSQL
Mueva los nuevos datos 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
Verifique los /usr/local/var/postgres/server.log
detalles y asegúrese de que el nuevo servidor se inició correctamente.
Finalmente, reinstale la pg
gema de rieles
gem 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.
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. Primero eliminé manualmente los directorios /usr/local/postgres9.3, luego ejecuté este comando y parece que perdí todo el directorio / usr / local / var / postgres (pude restaurarlo desde Time Machine)
gem uninstall pg
pero luego dejar que el reinstalador reinstale la versión correcta de Gemfile.lock simplemente ejecutándolo bundle
.
brew
ahora también tiene la opción de usar brew services stop postgresql
y en brew services start postgresql
lugar de llamar directamente launchctl unload
y launchctl load
.
A pesar de todas las respuestas anteriores, aquí van mis 5 centavos.
Funciona en cualquier sistema operativo y desde cualquier versión de postgres.
postgresql.conf
-> port
de 5432
a 5433
;cd
la bin
carpeta de la nueva versión ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
o pg_hba.conf
) necesitaría replicar manualmente esos cambios en la nueva instalación. En cambio, si lo usa pg_upgradecluster
, los archivos de configuración se copian en el nuevo clúster: manpages.ubuntu.com/manpages/precise/man8/…
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.
Aquí está la solución para usuarios de Ubuntu
Primero tenemos que parar postgresql
sudo /etc/init.d/postgresql stop
Cree un nuevo archivo llamado /etc/apt/sources.list.d/pgdg.list y agregue la siguiente línea
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Siga los siguientes comandos
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 necesito 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 número de puerto 5433. Verifíquelo con el siguiente comando
sudo pg_lsclusters
Actualización : este proceso es el mismo para actualizar 9.5 a través de al menos 11.5; simplemente modificar los comandos para reflejar las versiones 9.6
y 10
, donde 9.6
es la antigua versión y 10
es la nueva versión. Asegúrese de ajustar los directorios "antiguo" y "nuevo" 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 del sistema operativo / paquete de los que debo tener en cuenta.
( 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 pg_upgrade
binario, que se explica en (algunos) detalles en https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .
El único aspecto "complicado" pg_upgrade
es que si no se pasa el valor correcto para un argumento, o si no se inicia sesión como el usuario correcto o cd
en la ubicación correcta antes de ejecutar un comando, pueden aparecer mensajes de error crípticos.
En Ubuntu (y probablemente 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 las rutas predeterminadas del sistema de archivos o las 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 se realice correctamente, 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 pasarlo 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 detendrá ambas al mismo tiempo):
sudo systemctl stop postgresql
Cambie al usuario dedicado del sistema PostgreSQL:
su postgres
Vaya a su directorio de inicio (si no lo hace, se producirán 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 pueden especificarse 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
interruptor, porque si no lo hacemos, 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 pg_upgrade
comando 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
Cierre de sesión 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 tenga esto en cuenta si intenta probar la nueva instancia antes de "cortarla".
Inicie el servidor de manera normal (nuevamente, esto iniciará las instancias antiguas y nuevas):
systemctl start postgresql
Si desea hacer 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 5433
al mismo tiempo (antes de iniciar los servicios) o simplemente elimine la versión anterior (esto no eliminará el contenido real de la base de datos; deberá usarlo 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 punto final de la nota, no olvides considerar pg_upgrade
los buenos consejos:
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
, cambiar todo METHOD en pg_hba.conf de instalación tanto a la confianza antes de pg_upgrade, corriendo en pg_upgrade / / tmp privado no ~ no funcionaba así sudo mkdir /foobar
con chmod 777 /foobar
y corrió allí. Por fin el 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
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í.
El manual del usuario cubre este tema en profundidad. Usted puede:
pg_upgrade
en su lugar; o
pg_dump
y pg_restore
.
Si tiene dudas, hágalo con vertederos. No elimine el antiguo directorio de datos, solo guárdelo en caso de que algo salga mal / cometa un error; de esa manera puede volver a su instalación 9.3 sin cambios.
Para más detalles, consulte el manual.
Si está atascado, publique una pregunta detallada que explique cómo está atascado, dónde y qué intentó primero. Depende un poco de cómo instaló PostgreSQL también, ya que hay varias "distribuciones" diferentes de PostgreSQL para OS X (desafortunadamente). Por lo tanto, deberá proporcionar esa información.
De pie sobre los hombros de las otras criaturas pobres que pisotearon este fango, pude seguir estos pasos para volver a funcionar después de una actualización a Yosemite:
Suponiendo que ha utilizado 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
Inicialice 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/
Mueva los nuevos datos 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
Verifique los /usr/local/var/postgres/server.log
detalles y asegúrese de que el nuevo servidor se inició correctamente.
Finalmente, ¿reinstalar bibliotecas relacionadas?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
antes de migrar datos y eso provocó que se desinstalara postgres9.3. Esto ayudó :)
Parece que la solución ha sido horneada en Homebrew ahora:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Esto lo hizo por mi.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Corto y al grano. Sinceramente, no pretendo entender las entrañas de PostgreSQL, quiero hacer las cosas.
jessie
. Tenía más de 10 bases de datos y una cantidad de ~ 400 MB de datos de la base de datos se convirtió en un abrir y cerrar de ojos. Por otra parte, estoy usando un Debian virtual en un SSD.
pg_upgradecluster 9.4 main
pero recibí el error Error: specified cluster does not exist
... supongo que primero tengo que instalar postgresql-9.4 con esta guía: wiki.postgresql.org/wiki/Apt#Quickstart
En Windows seguía enfrentando diferentes mensajes de error cuando intentaba usar pg_upgrade
.
Me ahorró mucho tiempo solo para:
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 uno ayudó más a continuación de la primera. Además, para no hacerlo, no siga los pasos tal como están, 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 de 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 encriptada y establecer md5 para autenticar al usuario de postgres.
Después de todo, para verificar la server
versión de postgres ejecutada en la terminal:
sudo -u postgres psql postgres
Después de ingresar la contraseña, ejecute en la terminal de Postgres:
SHOW SERVER_VERSION;
Producirá algo como:
server_version
----------------
9.4.5
Para configurar e iniciar postgres he usado 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 desde un archivo:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
O si no funciona, prueba 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 extraer 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 viejos Postgres:
brew unlink postgresql
brew link -f postgresql-9.6
Si ocurre algún error, no olvide leer y seguir las instrucciones de preparación en cada paso.
Mira esto para más información: https://github.com/petere/homebrew-postgresql
En Windows 10 desde que tenía npm, instalé el paquete rimraf. npm install rimraf -g
Haga una copia de seguridad de todas sus bases de datos una por una usando el comando pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Luego instalé la última versión de PostgreSQL, es decir, 11.2, que me impulsó a usar el puerto 5433 esta vez.
Seguido por La desinstalación de versiones anteriores de PostgreSQL mine fue 10. Tenga en cuenta que el desinstalador puede dar una advertencia de no eliminar la carpeta C:\PostgreSQL\10\data
. Es por eso que tenemos el siguiente paso usando rimraf para eliminar permanentemente la carpeta y sus subcarpetas.
cambie al directorio de instalación de PostgreSQL y ejecutó el comando rimraf 10
. 10 es un nombre de directorio. Tenga en cuenta que use su versión anterior de PostgreSQL, es decir, 9.5 o algo así.
Ahora agregue C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
a las variables ambientales de Windows. Tenga en cuenta que mi nueva versión instalada es la 11, por eso estoy usando pg11
.
Navegue hasta C:\PostgreSQL\data\pg11
luego abra postgresql.conf
editar port = 5433
aport = 5432
Eso es. Abra cmd y escribapsql -U postgres
Ahora puede restaurar todas sus bases de datos respaldadas una por una usando el comando pg_restore -U $username --dbname=$databasename $filename
Mi solución para actualizar de Postgresql 11 a Postgresql 12 en Windows 10 es la siguiente.
Como primer comentario, deberá poder detener e iniciar el servicio Postgresql. Puede hacerlo mediante los siguientes comandos en Powershell.
Comienzo:
pg_ctl start -D “d:\postgresql\11\data”
Detener:
pg_ctl stop -D “d:\postgresql\11\data”
Estado:
pg_ctl status -D “d:\postgresql\11\data”
Sería aconsejable hacer una copia de seguridad antes de realizar la actualización. La instancia de Postgresql 11 debe estar ejecutándose. Luego, para copiar los globales
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
y luego para cada base de datos
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
o
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Si aún no lo ha hecho, instale Postgresql 12 (ya que Postgresql 11 también está instalado, estará en el puerto 5433)
Luego para hacer la actualización de la siguiente manera:
1) Detener el servicio Postgresql 11 (ver arriba)
2) Edite el postgresql.conf
archivo d:\postgresql\12\data
y cámbieloport = 5433
aport = 5432
3) Edite la ruta del entorno de usuario de Windows ( windows start
luego escribaenv
) para apuntar a Postgresql 12 en lugar de Postresql 11
4) Ejecute la actualización ingresando el siguiente 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
(En PowerShell, utilice la tecla de retroceso (o comilla inversa) `para continuar el comando en la línea siguiente)
5) y finalmente inicie el nuevo servicio Postgresql 12
pg_ctl start -D “d:\postgresql\12\data”
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/