/ postgresql

Bug PostgreSQL 9.4 et 9.5 sous Windows?

Certains d'entre nous rencontrent un bug lors de l'installation de PostgreSQL 9.4 ou 9.5 pour Windows avec le Package d'installation fourni par EntrepriseDB.

L'installateur échoue avec le message[1] :

Problem running post-install step, Installation may not complete correctly The database cluster initialisation failed.

En regardant dans les logs d'installation on peut voir :

initializing dependencies ... child process was terminated by exception 0xC000001D

Le code erreur 0xC000001D signifie:

STATUS_ILLEGAL_INSTRUCTION = {EXCEPTION} Illegal Instruction An attempt was made to execute an illegal instruction.

En d'autres termes, l'utilisation d'une instruction non supportée par le système.

Ce problème se produit lorsqu'un système n'expose pas correctement les extensions supportées par le processeur les "CPUID[2]".

Par exemple le CPU expose le flag AVX2 sans exposer les flags XSAVE et OSXSAVE, rendant ainsi le support des "Advanced Vector Extensions" partiel. Ce support partiel n'est pas détecté par le Runtime Visual Studio 2013, faisant ainsi planter l'application lors de l'utilisation de ces instructions. Ici lors de l'installation, c'est le processus "postgres.exe" qui plante...

On constate ce problème lorsque l'hyperviseur hébergeant une machine virtuelle est bogué, par exemple avec Citrix XenServer 6.5. (On peut aussi avoir un comportement similaire sur certain poste de travail avec un Bios bogué)

On peut facilement détecter sur système que tous les flags sont correctement exposés, pour effectuer ce contrôle, on peut exécuter ce petit programme disponible sur mon GitHub.

Concernant XenServer 6.5, le service pack 1 (SP1) corrige l'exposition des flags sur les machines virtuelles en désactivant l'AVX même si celui-ci est disponible sur le système.

Ceci n'est donc pas vraiment un bug PostgreSQL mais plutôt un bug de l'hyperviseur (/ machine) qui expose mal le support du CPU mais aussi de la runtime Visual Studio C++ 2013 qui n'est pas capable de détecter un support partiel....

Ceci nous prouve bien que la virtualisation n'est pas complètement transparente... et de l'importance de bien mettre à jour les hyperviseurs!

Un bug similaire a été détecté et corrigé dans les dernières versions mineur de PostgreSQL, lorsque l'on utilise un système d'exploitation Windows ne supportant pas l'AVX avec des processeur le supportant : Plus d'info ici



  1. Problem running post-install step, Installation may not complete correctly The database cluster initialisation failed. ↩︎

  2. https://en.wikipedia.org/wiki/CPUID ↩︎