J'utilise la base de données PostgreSQL pour mon application Ruby on Rails (sur Mac OS X 10.9).
Existe-t-il des instructions détaillées sur la mise à niveau de la base de données PostgreSQL?
J'ai peur de détruire les données de la base de données ou de les gâcher.
postgresql
upgrade
user3675188
la source
la source
Réponses:
En supposant que vous avez utilisé Home-Brew pour installer et mettre à niveau Postgres, vous pouvez effectuer les étapes suivantes.
Arrêtez le serveur Postgres actuel:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Initialisez une nouvelle base de données 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
exécuter
pg_upgrade
(note: changer la version du bac si vous effectuez une mise à niveau à partir d'autre chose que ci-dessous) :-v
pour activer la journalisation interne détaillée-d
l'ancien répertoire de configuration du cluster de bases de données-D
le nouveau répertoire de configuration du cluster de base de données-b
l'ancien répertoire exécutable de PostgreSQL-B
le nouveau répertoire exécutable de PostgreSQLDéplacer de nouvelles données en place:
Redémarrez Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Vérifiez les
/usr/local/var/postgres/server.log
détails et assurez-vous que le nouveau serveur a démarré correctement.Enfin, réinstallez le
pg
joyau des railsJe vous suggère de prendre le temps de lire la documentation PostgreSQL pour comprendre exactement ce que vous faites dans les étapes ci-dessus pour minimiser les frustrations.
la source
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
commande. J'ai d'abord supprimé manuellement les répertoires /usr/local/postgres9.3, puis j'ai exécuté cette commande et il semble que j'ai perdu l'intégralité du répertoire / usr / local / var / postgres (j'ai pu le restaurer à partir de Time Machine)gem uninstall pg
mais laissez ensuite bundler réinstaller la version correcte de Gemfile.lock en exécutant simplementbundle
.brew
maintenant également la possibilité d'utiliserbrew services stop postgresql
etbrew services start postgresql
au lieu d'appeler directementlaunchctl unload
etlaunchctl load
.Malgré toutes les réponses ci-dessus, voici mes 5 cents.
Il fonctionne sur n'importe quel système d'exploitation et à partir de n'importe quelle version postgres.
postgresql.conf
->port
de5432
à5433
;cd
dans le nouveaubin
dossier de version ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
la source
postgresql.conf
oupg_hba.conf
), vous devrez répliquer manuellement ces modifications dans la nouvelle installation. Au lieu de cela, si vous utilisezpg_upgradecluster
, les fichiers de configuration sont copiés dans le nouveau cluster: 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.
Voici la solution pour Ubuntu utilisateurs d'
Nous devons d'abord arrêter postgresql
Créez un nouveau fichier appelé /etc/apt/sources.list.d/pgdg.list et ajoutez la ligne ci-dessous
Suivez les commandes ci-dessous
Maintenant, nous avons tout, il suffit de le mettre à niveau comme ci-dessous
C'est tout. Le cluster principalement mis à niveau fonctionnera sur le port numéro 5433. Vérifiez-le avec la commande ci-dessous
la source
Mise à jour : ce processus est le même pour la mise à niveau de 9.5 à au moins 11.5; modifiez simplement les commandes pour refléter les versions
9.6
et10
, où9.6
est l' ancienne version et10
la nouvelle version. Veillez également à ajuster les "anciens" et "nouveaux" répertoires en conséquence.Je viens de mettre à niveau PostgreSQL 9.5 vers 9.6 sur Ubuntu et j'ai pensé partager mes conclusions, car il y a quelques nuances spécifiques au système d'exploitation / package dont vous devez être conscient.
( Je ne voulais pas devoir vider et restaurer les données manuellement , donc plusieurs des autres réponses ici n'étaient pas viables.)
En bref, le processus consiste à installer la nouvelle version de PostgreSQL avec l'ancienne version (par exemple, 9.5 et 9.6), puis à exécuter le
pg_upgrade
binaire, qui est expliqué en (certains) détails sur https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .Le seul aspect "délicat" de
pg_upgrade
cet échec est de ne pas transmettre la valeur correcte d'un argument, ou de ne pas être connecté en tant qu'utilisateur correct oucd
à l'emplacement correct avant d'exécuter une commande, peut entraîner des messages d'erreur cryptiques.Sur Ubuntu (et probablement Debian), à condition d'utiliser le référentiel "officiel",
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
, et à condition que vous n'ayez pas changé les chemins par défaut du système de fichiers ou les options d'exécution, la procédure suivante devrait faire le travail.Installez la nouvelle version (notez que nous spécifions
9.6
explicitement le):Une fois l'installation réussie, les deux versions s'exécuteront côte à côte, mais sur des ports différents. La sortie de l'installation le mentionne en bas, mais il est facile de l'oublier:
Arrêtez les deux instances de serveur (cela arrêtera les deux en même temps):
Passez à l'utilisateur du système PostgreSQL dédié:
Déplacez-vous dans son répertoire personnel (ne pas le faire entraînera des erreurs):
pg_upgrade
nécessite les entrées suivantes (pg_upgrade --help
nous le dit):Ces entrées peuvent être spécifiées avec des "noms longs", pour les rendre plus faciles à visualiser:
Nous devons également passer le
--new-options
commutateur, car le non-respect entraîne les conséquences suivantes:Cela se produit car les options de configuration par défaut sont appliquées en l'absence de ce commutateur, ce qui entraîne l'utilisation d'options de connexion incorrectes, d'où l'erreur de socket.
Exécutez la
pg_upgrade
commande à partir de la nouvelle version de PostgreSQL:Déconnexion du compte utilisateur système dédié:
La mise à niveau est maintenant terminée, mais la nouvelle instance se liera au port
5433
(la valeur par défaut standard est5432
), alors gardez cela à l'esprit si vous essayez de tester la nouvelle instance avant de la "couper".Démarrez le serveur comme d'habitude (encore une fois, cela démarrera à la fois l'ancienne et la nouvelle instance):
Si vous souhaitez
/etc/postgresql/9.6/main/postgresql.conf
définir la nouvelle version par défaut, vous devrez modifier le fichier de configuration efficace, par exemple , et vous assurer que le port est défini comme tel:Si vous faites cela, modifiez le numéro de port de l'ancienne version
5433
en même temps (avant de démarrer les services), ou supprimez simplement l'ancienne version (cela ne supprimera pas le contenu de votre base de données réelle; vous devrez l'utiliserapt --purge remove postgresql-9.5
pour que cela se produise ):La commande ci-dessus arrêtera toutes les instances, vous devrez donc démarrer la nouvelle instance une dernière fois avec:
Enfin, n'oubliez pas de considérer
pg_upgrade
les bons conseils de:la source
sudo su postgres
:, changez toutes les METHOD dans les deux installations pg_hba.conf pour faire confiance avant pg_upgrade, exécuter pg_upgrade dans / private / tmp pas ~ n'a pas fonctionnésudo mkdir /foobar
avecchmod 777 /foobar
et l'a exécuté là-bas. Enfin la commande 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 vous utilisez des services homebrew et homebrew, vous pouvez probablement simplement faire:
Je pense que cela pourrait ne pas fonctionner complètement si vous utilisez des fonctionnalités avancées de postgres, mais cela a parfaitement fonctionné pour moi.
la source
Le manuel de l'utilisateur couvre ce sujet en profondeur. Vous pouvez:
pg_upgrade
en place; oupg_dump
etpg_restore
.En cas de doute, faites-le avec des décharges. Ne supprimez pas l'ancien répertoire de données, conservez-le simplement en cas de problème / vous faites une erreur; de cette façon, vous pouvez simplement revenir à votre installation 9.3 inchangée.
Pour plus de détails, consultez le manuel.
Si vous êtes bloqué, postez une question détaillée expliquant comment vous êtes bloqué, où et ce que vous avez essayé en premier. Cela dépend aussi un peu de la façon dont vous avez installé PostgreSQL, car il existe plusieurs "distributions" différentes de PostgreSQL pour OS X (malheureusement). Vous devez donc fournir ces informations.
la source
Debout sur les épaules des autres pauvres créatures marchant à travers cette boue, j'ai pu suivre ces étapes pour me remettre en marche après une mise à niveau vers Yosemite:
En supposant que vous avez utilisé Home-Brew pour installer et mettre à niveau Postgres, vous pouvez effectuer les étapes suivantes.
Arrêtez le serveur Postgres actuel:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Initialisez une nouvelle base de données 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
Installez postgres 9.3 (car il n'était plus présent sur ma machine):
brew install homebrew/versions/postgresql93
Ajouter des répertoires supprimés lors de la mise à niveau 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
exécuter
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/
Déplacer de nouvelles données en place:
Redémarrez Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Vérifiez les
/usr/local/var/postgres/server.log
détails et assurez-vous que le nouveau serveur a démarré correctement.Enfin, réinstallez les bibliothèques associées?
la source
brew cleanup
avant de migrer les données et cela a entraîné la désinstallation de postgres9.3. Cela a aidé. :)Il semble que la solution ait été intégrée à Homebrew maintenant:
la source
Cela l'a fait pour moi.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Court et précis. Honnêtement, je ne vise pas à comprendre les tripes de PostgreSQL, je veux faire avancer les choses.
la source
jessie
. Avait plus de 10 bases de données et une quantité d'environ 400 Mo de données de base de données a été convertie en un clin d'œil. Là encore, j'utilise une Debian virtuelle sur un SSD.pg_upgradecluster 9.4 main
mais j'obtiens l'erreur Erreur:specified cluster does not exist
... Je suppose que je dois d'abord réinstaller postgresql-9.4 avec ce guide: wiki.postgresql.org/wiki/Apt#QuickstartSous Windows, je faisais face à différents messages d'erreur lorsque j'essayais de l'utiliser
pg_upgrade
.J'ai économisé beaucoup de temps pour:
la source
Ma solution a été de combiner ces deux ressources:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
et
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
Le second un a aidé plus alors le premier. De plus, ne suivez pas les étapes telles quelles car certaines ne sont pas nécessaires. De plus, si vous ne pouvez pas sauvegarder les données via la console postgres, vous pouvez utiliser une approche alternative et la sauvegarder avec pgAdmin 3 ou un autre programme, comme je l'ai fait dans mon cas.
En outre, le lien: https://help.ubuntu.com/stable/serverguide/postgresql.html A aidé à définir le mot de passe crypté et à définir md5 pour authentifier l'utilisateur postgres.
Après tout, pour vérifier la
server
version postgres exécutée dans le terminal:Après avoir entré le mot de passe exécuté dans le terminal postgres:
Il produira quelque chose comme:
Pour définir et démarrer postgres, j'ai utilisé la commande:
Et puis pour restaurer la base de données à partir d'un fichier:
Ou si cela ne fonctionne pas, essayez avec celui-ci:
Et si vous utilisez Rails, faites un
bundle exec rake db:migrate
après avoir tiré le code :)la source
Pour Mac via homebrew:
brew tap petere/postgresql
,brew install <formula>
(par exemplebrew install petere/postgresql/postgresql-9.6
)Supprimer les anciens Postgres:
brew unlink postgresql
brew link -f postgresql-9.6
En cas d'erreur, n'oubliez pas de lire et de suivre les instructions de brassage à chaque étape.
Vérifiez cela pour plus: https://github.com/petere/homebrew-postgresql
la source
Sur Windows 10 depuis que j'avais npm, j'ai installé le paquet rimraf.
npm install rimraf -g
Sauvegardez toutes vos bases de données une par une en utilisant la commande
pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Ensuite, j'ai installé la dernière version de PostgreSQL, c'est-à-dire 11.2, ce qui m'a incité à utiliser le port 5433 cette fois.
Suivi par la désinstallation des anciennes versions de PostgreSQL, la mienne était de 10. Notez que le programme de désinstallation peut donner un avertissement de ne pas supprimer le dossier
C:\PostgreSQL\10\data
. C'est pourquoi nous avons l'étape suivante en utilisant rimraf pour supprimer définitivement le dossier et ses sous-dossiers.changez dans le répertoire d'installation de PostgreSQL et exécutez la commande
rimraf 10
. 10 est un nom de répertoire. Notez utiliser votre ancienne version de PostgreSQL c'est-à-dire 9.5 ou quelque chose.Ajoutez maintenant
C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
dans les variables d'environnement Windows. Notez que ma nouvelle version installée est 11, c'est pourquoi j'utilisepg11
.Accédez à,
C:\PostgreSQL\data\pg11
puis ouvrez lapostgresql.conf
modificationport = 5433
pourport = 5432
C'est tout. Ouvrez cmd et tapez
psql -U postgres
Vous pouvez maintenant restaurer toutes vos bases de données sauvegardées une par une en utilisant la commande
pg_restore -U $username --dbname=$databasename $filename
la source
Ma solution pour la mise à niveau de Postgresql 11 vers Postgresql 12 sur Windows 10 est la suivante.
En premier lieu, vous devrez pouvoir arrêter et démarrer le service Postgresql. Pour ce faire, utilisez les commandes suivantes dans Powershell.
Début:
pg_ctl start -D “d:\postgresql\11\data”
Arrêtez:
pg_ctl stop -D “d:\postgresql\11\data”
Statut:
pg_ctl status -D “d:\postgresql\11\data”
Il serait sage de faire une sauvegarde avant de faire la mise à niveau. L'instance Postgresql 11 doit être en cours d'exécution. Ensuite, pour copier les globaux, faites
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
puis pour chaque base de données
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
Si ce n'est pas déjà fait, installez Postgresql 12 (car Postgresql 11 est également installé, ce sera sur le port 5433)
Ensuite, effectuez la mise à niveau comme suit:
1) Arrêtez le service Postgresql 11 (voir ci-dessus)
2) Modifiez le
postgresql.conf
fichierd:\postgresql\12\data
et passezport = 5433
àport = 5432
3) Modifiez le chemin de l'environnement utilisateur Windows (
windows start
puis tapezenv
) pour pointer vers Postgresql 12 au lieu de Postresql 114) Exécutez la mise à niveau en entrant la commande suivante.
(Dans PowerShell, utilisez le backtick (ou le backquote) `pour continuer la commande sur la ligne suivante)
5) et enfin lancer le nouveau service Postgresql 12
pg_ctl start -D “d:\postgresql\12\data”
la source
Je pense que c'est le meilleur lien pour votre solution pour mettre à jour les postgres en 9.6
la source