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é.
postgresql
upgrade
usuario3675188
fuente
fuente
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) :-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 PostgreSQLMueva los nuevos datos a su lugar:
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 rielesLe 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.
fuente
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ándolobundle
.brew
ahora también tiene la opción de usarbrew services stop postgresql
y enbrew services start postgresql
lugar de llamar directamentelaunchctl unload
ylaunchctl 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
de5432
a5433
;cd
labin
carpeta de la nueva versión ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
fuente
postgresql.conf
opg_hba.conf
) necesitaría replicar manualmente esos cambios en la nueva instalación. En cambio, si lo usapg_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
Cree un nuevo archivo llamado /etc/apt/sources.list.d/pgdg.list y agregue la siguiente línea
Siga los siguientes comandos
Ahora tenemos todo, solo necesito actualizarlo como se muestra a continuación
Eso es. El clúster mayormente actualizado se ejecutará en el número de puerto 5433. Verifíquelo con el siguiente comando
fuente
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
y10
, donde9.6
es la antigua versión y10
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 ocd
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):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:
Detenga ambas instancias del servidor (esto detendrá ambas al mismo tiempo):
Cambie al usuario dedicado del sistema PostgreSQL:
Vaya a su directorio de inicio (si no lo hace, se producirán errores):
pg_upgrade
requiere las siguientes entradas (pg_upgrade --help
nos dice esto):Estas entradas pueden especificarse con "nombres largos", para que sean más fáciles de visualizar:
También debemos pasar el
--new-options
interruptor, porque si no lo hacemos, se produce lo siguiente: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:Cierre de sesión de la cuenta de usuario del sistema dedicado:
La actualización ahora está completa, pero la nueva instancia se vinculará al puerto
5433
(el valor predeterminado estándar es5432
), 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):
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: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á usarloapt --purge remove postgresql-9.5
para que eso suceda) ):El comando anterior detendrá todas las instancias, por lo que deberá iniciar la nueva instancia por última vez con:
Como punto final de la nota, no olvides considerar
pg_upgrade
los buenos consejos:fuente
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
conchmod 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:
Creo que esto podría no funcionar por completo si está utilizando funciones avanzadas de postgres, pero funcionó perfectamente para mí.
fuente
El manual del usuario cubre este tema en profundidad. Usted puede:
pg_upgrade
en su lugar; opg_dump
ypg_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.
fuente
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:
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?
fuente
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:
fuente
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.
fuente
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#QuickstartEn Windows seguía enfrentando diferentes mensajes de error cuando intentaba usar
pg_upgrade
.Me ahorró mucho tiempo solo para:
fuente
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:Después de ingresar la contraseña, ejecute en la terminal de Postgres:
Producirá algo como:
Para configurar e iniciar postgres he usado el comando:
Y luego para restaurar la base de datos desde un archivo:
O si no funciona, prueba con este:
Y si está utilizando Rails, haga un
bundle exec rake db:migrate
después de extraer el código :)fuente
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
fuente
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 usandopg11
.Navegue hasta
C:\PostgreSQL\data\pg11
luego abrapostgresql.conf
editarport = 5433
aport = 5432
Eso es. Abra cmd y escriba
psql -U postgres
Ahora puede restaurar todas sus bases de datos respaldadas una por una usando el comando
pg_restore -U $username --dbname=$databasename $filename
fuente
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
archivod:\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 114) Ejecute la actualización ingresando el siguiente comando.
(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”
fuente
Creo que este es el mejor enlace para su solución para actualizar Postgres a 9.6
fuente