Mise jour PostgreSql Windows
Lors de la mise à jour de PostgreSql
, il est nécessaire de migrer les bases de données existantes. Cet article présente le principe de mise à jour sous Windows.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Objectif
Dans le cadre de cet article, une instance PostgreSql
est déjà installé à l'emplacement c:\Apps\PostgreSql\9.5
. L'objectif est d'effectuer la mise à jour en version 9.6
.
A noter que dans cet article, il n'existe pas de compte pour démarrer le serveur. La documentation officielle propose plusieurs approche et celle retenue ici consiste à utiliser l'outil pg_upgrade
.
Installation
Il est nécessaire d'effectuer l'installation de la nouvelle version, soit 9.6
, après avoir téléchargé l'installer. Un service est alors ajoutée dans Windows
.
Attention il faut impérativement que la locale de la nouvelle isntance soit identique à celle mise à jour.
Configuration Sécurité
Lors de la migration des données, l'outil pg_upgrade
va effectuer une connexion sur l'instance source ainsi que la cible. Il est donc nécessaire de modifier la configuration des deux instances pour accepter les connexions sans mot de passe.
Pour cela, il faut éditer le fichier data/pg_hba.conf
et changer la méthode avec la valeur trust
, qui est par défaut md5
. Il est recommandé de faire une copie des lignes existantes pour effectuer les modifications, et de les commenter en plaçant le caractère #
en début de ligne.
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
#host all all 127.0.0.1/32 md5
host all all 127.0.0.1/32 trust
# IPv6 local connections:
#host all all ::1/128 md5
host all all ::1/128 trust
Attention ceci doit être temporaire le temps de la mise à jour.
Exécution
Une fois les instances configurées, il faut ouvrir une fenêtre de commande en se plaçant dans le répertoire bin
de la nouvelle version, soit dans le répertoire C:\Apps\PostgreSQL\9.6\bin
dans le cadre de cet article.
L'outil pg_upgrade
doit être exécuté en spécifiant les quatre paramètres suivant.
-
--old-datadir
: emplacement du précédent répertoire de données; -
--new-datadir
: emplacement du nouveau répertoire de données; -
--old-bindir
: emplacement du précédent répertoire des binaires; -
--new-bindir
: emplacement du nouveau répertoire des binaires.
Soit la comande suivante.
c:\Apps\PostgreSQL\9.6\bin>pg_upgrade.exe --old-datadir "C:/Apps/PostgreSQL/9.5/data" --new-datadir "C:/Apps/PostgreSQL/9.6/data" --old-bindir "C:/Apps/PostgreSQL/9.5/bin" --new-bindir "C:/Apps/PostgreSQL/9.6/bin"
En l'état, l'outil
pg_upgrade
utilise le compte utilisateur pour se connecter à la base de données. C'est pourquoi il est conseillé, dans les différents articles, de se connecter avec le compte de service de PostgreSql
à l'aide de la commande suivante.
RUNAS /USER:postgres "CMD.EXE"
</code>
Cependant, l'outil pg_upgrade
accepte l'argument -U
, ou --username
pour indiquer le compte de connexion aux bases. Ceci a été utilisé pour spécifier le compte postgres
, compte administrateur par défaut.
L'exécution peut prendre un peu de temps en fonction de la taille des bases.
c:\Apps\PostgreSQL\9.6\bin>pg_upgrade.exe -U postgres --old-datadir "C:/Apps/PostgreSQL/9.5/data" --new-datadir "C:/Apps/PostgreSQL/9.6/data" --old-bindir "C:/Apps/PostgreSQL/9.5/bin" --new-bindir "C:/Apps/PostgreSQL/9.6/bin"
Performing Consistency Checks ----------------------------- Checking cluster versions ok Checking database user is the install user ok Checking database connection settings ok Checking for prepared transactions ok Checking for reg* system OID user data types ok Checking for contrib/isn with bigint-passing mismatch ok Checking for roles starting with 'pg_' ok Creating dump of global objects ok Creating dump of database schemas ok Checking for presence of required libraries ok Checking database user is the install user ok Checking for prepared transactions ok If pg_upgrade fails after this point, you must re-initdb the new cluster before continuing. Performing Upgrade ------------------ Analyzing all rows in the new cluster ok Freezing all rows on the new cluster ok Deleting files from new pg_clog ok Copying old pg_clog to new server ok Setting next transaction ID and epoch for new cluster ok Deleting files from new pg_multixact/offsets ok Copying old pg_multixact/offsets to new server ok Deleting files from new pg_multixact/members ok Copying old pg_multixact/members to new server ok Setting next multixact ID and offset for new cluster ok Resetting WAL archives ok Setting frozenxid and minmxid counters in new cluster ok Restoring global objects in the new cluster ok Restoring database schemas in the new cluster ok Copying user relation files ok Setting next OID for new cluster ok Sync data directory to disk ok Creating script to analyze new cluster ok Creating script to delete old cluster ok Upgrade Complete ---------------- Optimizer statistics are not transferred by pg_upgrade so, once you start the new server, consider running: analyze_new_cluster.bat Running this script will delete the old cluster's data files: delete_old_cluster.bat
La mise à jour est alors terminée et il faut penser à restaurer les paramètres de connexion dans le fichier data/pg_hba.conf
.
Erreurs communes
Mode sécurité
Lors de la première mise à jour sans connaître les concepts, es erreurs peuvent être faites.
La modification de la sécurité ne doit pas être oubliée, sinon l'outil ne pourra pas se connecter aux instances puisque aucun mot de passe n'est fourni. Le message d'erreur connection to database failed
sera alors affiché.
c:\Apps\PostgreSQL\9.6\bin>pg_upgrade.exe --old-datadir "C:/Apps/PostgreSQL/9.5/data" --new-datadir "C:/Apps/PostgreSQL/9.6/data" --old-bindir "C:/Apps/PostgreSQL/9.5/bin" --new-bindir "C:/Apps/PostgreSQL/9.6/bin" Performing Consistency Checks ----------------------------- Checking cluster versions ok connection to database failed: fe_sendauth: no password supplied could not connect to old postmaster started with the command: "C:/Apps/PostgreSQL/9.5/bin/pg_ctl" -w -l "pg_upgrade_server.log" -D "C:/Apps/PostgreSQL/9.5/data" -o "-p 50432 -b " start Failure, exiting
Compte connexion
La deuxième erreur rencontré est relative au compte de connexion. L'utilisateur connecté était "dummy", mais celui-ci n'existait pas dans les instances et le message d'erreur could not connect to old postmaster
est affiché.
c:\Apps\PostgreSQL\9.6\bin>pg_upgrade.exe --old-datadir "C:/Apps/PostgreSQL/9.5/data" --new-datadir "C:/Apps/PostgreSQL/9.6/data" --old-bindir "C:/Apps/PostgreSQL/9.5/bin" --new-bindir "C:/Apps/PostgreSQL/9.6/bin" Performing Consistency Checks ----------------------------- Checking cluster versions ok connection to database failed: FATAL: le rôle « etienne » n'existe pas could not connect to old postmaster started with the command: "C:/Apps/PostgreSQL/9.5/bin/pg_ctl" -w -l "pg_upgrade_server.log" -D "C:/Apps/PostgreSQL/9.5/data" -o "-p 50432 -b " start Failure, exiting
Locale
Il est impérative que les deux instances soient installées avec le même paramètre de localisation, sinon le message d'erreur lc_collate values for database "postgres" do not match
est affiché.
c:\Apps\PostgreSQL\9.6\bin>pg_upgrade.exe -U postgres --old-datadir "C:/Apps/PostgreSQL/9.5/data" --new-datadir "C:/Apps/PostgreSQL/9.6/data" --old-bindir "C:/Apps/PostgreSQL/9.5/bin" --new-bindir "C:/Apps/PostgreSQL/9.6/bin" Performing Consistency Checks ----------------------------- Checking cluster versions ok Checking database user is the install user ok Checking database connection settings ok Checking for prepared transactions ok Checking for reg* system OID user data types ok Checking for contrib/isn with bigint-passing mismatch ok Checking for roles starting with 'pg_' ok Creating dump of global objects ok Creating dump of database schemas ok lc_collate values for database "postgres" do not match: old "French_France.1252", new "English_United States.1252" Failure, exiting
Voir Aussi
Documentation officielle: https://www.postgresql.org/docs/current/static/upgrading.html
https://www.postgresql.org/docs/current/static/pgupgrade.html