[spip-dev] Problème à l'installation de spip 2.0.8 avec PostgreSQL

Bonsoir,

Je viens d'essayer de faire une installation de spip 2.0.8 [13982] sous postgresql
(8.4.0), et voici les erreurs que je viens d'avoir :

1) Par défaut PostgreSQL arrive avec 3 bases : postgres, template0
et template1. Il serait peut-être judicieux d'essayer de se connecter à template0 ou
template1 plutôt que spip (qui n'existe pas par défaut.). Le souci est que s'il n'y a pas
de base "spip", l'étape 1 se termine en échec sans message d'erreur apparent. On
trouve dans les logs d'apache, que spip cherche à se connecter à une base nommée
spip. Une fois la base "spip" créée, l'étape 1 passe.

2) Echec de la récupération de la liste des bases présentes sur le serveur. Les messages
d'erreur du serveur web indiquent :

PHP Warning: Missing argument 2 for spip_pg_query_simple(), called in /Users/flo/Sites/spip/ecrire/req/pg.php on line 418 and defined in /Users/flo/Sites/spip/ecrire/req/pg.php on line 145, referer: http://localhost/~flo/spip/ecrire/?exec=install&etape=1&chmod=511

Le patch suivant permet de paser l'étape avec succès :

--- pg.php.orig 2009-07-07 15:39:53.000000000 +0200
+++ pg.php 2009-07-07 15:40:06.000000000 +0200
@@ -413,9 +413,13 @@
  // http://doc.spip.org/@spip_pg_listdbs
  function spip_pg_listdbs() {
- return spip_pg_query_simple("select * from pg_database");
+ $serveur = 'pg';
+ $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
+ $link = $connexion['link'];

Bonsoir,

Bonsoir

Je viens d'essayer de faire une installation de spip 2.0.8 [13982] sous postgresql
(8.4.0),

Bonne nouvelle, trop peu de gens l'utilisent.

et voici les erreurs que je viens d'avoir :

1) Par défaut PostgreSQL arrive avec 3 bases : postgres, template0
et template1. Il serait peut-être judicieux d'essayer de se connecter à template0 ou
template1 plutôt que spip (qui n'existe pas par défaut.).

A ce que j'avais lu, dans beaucoup de configurations de PG la base par défaut a pour un utilisateur est celui de son login, et SPIP essaye aussi ce nom. As-tu un pointeur sur la doc quant aux 3 noms que tu indiques ?

2) Echec de la récupération de la liste des bases présentes sur le serveur.

Je n'avais pas ce droit sur la configuration dont je me suis servi pour faire le portage, je n'ai donc pas pu tester cette partie de l'API de SPIP vers les serveurs SQL dans le cas de PG en fait.

Les messages
d'erreur du serveur web indiquent :

PHP Warning: Missing argument 2 for spip_pg_query_simple(), called in /Users/flo/Sites/spip/ecrire/req/pg.php on line 418 and defined in /Users/flo/Sites/spip/ecrire/req/pg.php on line 145, referer: http://localhost/~flo/spip/ecrire/?exec=install&etape=1&chmod=511

Le patch suivant permet de paser l'étape avec succès :

--- pg.php.orig 2009-07-07 15:39:53.000000000 +0200
+++ pg.php 2009-07-07 15:40:06.000000000 +0200
@@ -413,9 +413,13 @@
// http://doc.spip.org/@spip_pg_listdbs
function spip_pg_listdbs() {
- return spip_pg_query_simple("select * from pg_database");
+ $serveur = 'pg';
+ $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
+ $link = $connexion['link'];
+
+ return spip_pg_query_simple($link, "select * from pg_database");
}

Pas mal vu ! Je viens d'envoyer le correctif sur la branche de la future 2.0.9 ainsi que la version de développement,
tu le trouveras ici:

http://trac.rezo.net/trac/spip/changeset/14176

3) Par la suite l'installation se passe apparemment bien (j'arrive au formulaire de connection
à l'interface privée, et là, impossible de me connecter : utilisateur inconnu. Un petit tour dans
mon serveur postgresql me montre qu'il manque les tables
...
- spip_auteurs

....

Si celle-ci manque, pas étonnant. Mais ta liste est incomplète, il y en a quand même quelques unes de créées ? est-ce que les autres sont créées ?

et pas le moindre message d'erreur dans les logs d'apache.

dans ecrire/install/etape_3.php il y a des @ devant les fonctions sql_XXX, enlève les voir si ça délivre des messages d'erreurs (mais certains ne sont pas anormaux).

Etes-vous au courant de ces problèmes ?

Non, qq a posté récemment se plaigant d'un problème beaucoup plus en aval. C'est visiblement une config de PG que SPIP n'a jamais rencontrée.

Dois-je ouvrir un ticket ?

La procédure std est de demander de l'aide sur cette liste, et d'ouvrir un ticket seulement si elle ne vient pas au bout de qq jours, afin qu'on n'oublie pas si ce n'est pas qqch de résoluble rapidement.

Committo,Ergo:Sum

Bonjour,

Je viens d'essayer de faire une installation de spip 2.0.8 [13982] sous postgresql
(8.4.0),

Bonne nouvelle, trop peu de gens l'utilisent.

et voici les erreurs que je viens d'avoir :

1) Par défaut PostgreSQL arrive avec 3 bases : postgres, template0
et template1. Il serait peut-être judicieux d'essayer de se connecter à template0 ou
template1 plutôt que spip (qui n'existe pas par défaut.).

A ce que j'avais lu, dans beaucoup de configurations de PG la base par défaut a pour un utilisateur est celui de son login, et SPIP essaye aussi ce nom.

c'est au moment de la connection que PG essaye de se connecter par défaut à une base qui porte le nom de l'utilisateur.
A l'installation (au moins sur linux/bsd/macos) il n'y a pas de base au nom de l'utilisateur.

As-tu un pointeur sur la doc quant aux 3 noms que tu indiques ?

3) Par la suite l'installation se passe apparemment bien (j'arrive au formulaire de connection
à l'interface privée, et là, impossible de me connecter : utilisateur inconnu. Un petit tour dans
mon serveur postgresql me montre qu'il manque les tables
...
- spip_auteurs

....

Si celle-ci manque, pas étonnant. Mais ta liste est incomplète, il y en a quand même quelques unes de créées ? est-ce que les autres sont créées ?

oui, je n'ai listé que celles qui manquaient. les autres sont bien créées.

et pas le moindre message d'erreur dans les logs d'apache.

dans ecrire/install/etape_3.php il y a des @ devant les fonctions sql_XXX, enlève les voir si ça délivre des messages d'erreurs (mais certains ne sont pas anormaux).

Ca ne change rien, je n'ai pas plus de messages. Mais ce n'est pas très étonnant car il n'y a pas d'appel à la fonction sql_create dans etape_3.php C'est d'ailleurs étrange : je n'ai trouvé d'appel à sql_create nulle part dans le réperoire install !

Dois-je ouvrir un ticket ?

La procédure std est de demander de l'aide sur cette liste, et d'ouvrir un ticket seulement si elle ne vient pas au bout de qq jours, afin qu'on n'oublie pas si ce n'est pas qqch de résoluble rapidement.

ok.

Merci de ta réponse rapide.

c'est au moment de la connection que PG essaye de se connecter par défaut à une base qui porte le nom de l'utilisateur.
A l'installation (au moins sur linux/bsd/macos) il n'y a pas de base au nom de l'utilisateur.

As-tu un pointeur sur la doc quant aux 3 noms que tu indiques ?

PostgreSQL: Documentation: 8.4: Creating a Database
PostgreSQL: Documentation: 8.4: Template Databases

ok merci, je vais regarder.

- spip_auteurs

....

Si celle-ci manque, pas étonnant. Mais ta liste est incomplète, il y en a quand même quelques unes de créées ? est-ce que les autres sont créées ?

oui, je n'ai listé que celles qui manquaient. les autres sont bien créées.

Hmm, Ca donne l'impression d'une rupture de connexion au milieu de la séquence de création.

je n'ai trouvé d'appel à sql_create nulle part dans le réperoire install !

dans install/etape_3 on appelle la fonction creer_base, qui est définie dans base/create c'est cette fonction qu'il faudrait tracer alors.

Committo,Ergo:Sum

J'ai tracé les étapes de création. Certaines créations de tables plantent
avec l'erreur :
ERROR: date/time field value out of range: "0000-01-01 00:00:00"

Le problème vient sans doute du fait que l'année 0 n'existant pas (il y a
eu une année -1 et la suivante est 1), la valeur "1er janvier de l'année
0" n'a pas de sens pour lui.

Le problème a été partiellement traité dans ecrire/req/pg.php (line 1231),
mais la date "zéro" de MySQL a été transformée en "0000-01-01" au lieu de
"0001-01-03 :
       str_replace("longblob", 'text',
- str_replace("0000-00-00",'0000-01-01',
+ str_replace("0000-00-00",'0001-01-01',
     preg_replace("/datetime/i", 'timestamp',

avec ça, ça roule.

Encore un autre petit soucis de soulevé. Si on veut créer une nouvelle
base lors de l'étape 3, la commande se plante car l'instruction envoyée au
serveur est
$fquery("CREATE DATABASE `$sel_db"`, $server_db);
et PostgreSQL ne connaît pas les `` autours des noms des bases. C'est un
traitement qui est fait d'ordinaire dans ecrire/req/pg.php, mais là, la
commande est envoyée directement.
Moyennant de supprimer les ``, la base est correctement créée.

Peut-être faudrait-il faire une couche d'abstraction pour la commande
create database comme pour les autres commandes sql ?