Support Postgresql

Bonjour

j’utilise depuis très longtemps spip pour afficher le contenu de bases de données de mon laboratoire, la plupart étant en Postgresql.

Depuis que le support Postgresql est passé en expérimental, quand j’ai besoin de m’interfacer avec une base pg, je renomme ecrire/req/pg.exp.php en ecrire/req/pg.php et ça roule.

Un peu plus récemment (passage en spip 4 je pense), j’ai dû ajouter la fonction spip_pg_table_exists pour que ça continue à fonctionner.

--- a/ecrire/req/pg.php
+++ b/ecrire/req/pg.exp.php
@@ -127,6 +127,7 @@ $GLOBALS['spip_pg_functions_1'] = [
        'set_connect_charset' => 'spip_pg_set_connect_charset',
        'showbase' => 'spip_pg_showbase',
        'showtable' => 'spip_pg_showtable',
+  'table_exists' => 'spip_pg_table_exists',
        'update' => 'spip_pg_update',
        'updateq' => 'spip_pg_updateq',
 ];
@@ -1535,3 +1536,8 @@ function mysql2pg_type($v) {
 function spip_versions_pg() {
        return function_exists('pg_connect');
 }
+
+function spip_pg_table_exists(string $table, $serveur = '', $requeter = true) {
+   $r = spip_pg_query(
+   	'SELECT * FROM  information_schema.tables' .
+   	' WHERE table_name ILIKE ' . _q($table), $serveur, $requeter);
+   if (!$requeter) {
+      return $r;
+   }
+   $res = spip_pg_fetch($r);
+   return (bool) $res;
+}  
+

Aujourd’hui, je travaille sur la migration 4.1 → 4.4 et je tombe sur un os que je n’arrive pas à résoudre.

Ce squelette fonctionne

<BOUCLE_apisp(apis_gavo:apis_data){nom='IO'}{par data_id}>
<br>#DATA_ID
</BOUCLE_apisp>

Mais pas celui-là :

<BOUCLE_apisp(apis_gavo:apis_data){nom='IO'}{par data_id}{pagination 10}>
<br>#DATA_ID
</BOUCLE_apisp>

En mettant quelques error_log dans pg.php, je vois que dans les 2 cas ma requête est bien exécutée (donc pas un pb de syntaxe).

Est-ce que quelqu’un aurait une idée ?

1 « J'aime »

Bonne nouvelle, on n’avait plus de retours de personnes qui utilisent pgsql ^^

Je t’aurais bien dit de créer un ticket à ce sujet, mais justement on a acté il y a quelques temps que l’équipe ne souhaitait pas se charger la barque avec pgsql faute de retours de personnes qui l’utilisent :\ Mais bon, peut-être qu’un ticket vaudrait tout de même le coup ? ping @maintenance ?

Je serais vraiment très embêtée que postresql ne fonctionne plus du tout. Mes sites sont bloqués en 4.1

Sans le support PG, on n’aura plus d’interface simple pour montrer nos données, et il n’est pas envisageable de migrer vers Mysql

Note que je ne m’en sers qu’en lecture.
S’il faut que je m’implique pour conserver le support, je suis prête à le faire

1 « J'aime »

\o/ dans ce cas un ticket sur spip / ecrire · GitLab est une bonne base de départ pour ce potentiel de « revival » de pgsql dans SPIP :slight_smile:

2 « J'aime »

Done

2 « J'aime »

Une première étape de franchie avec cette PR

à suivre avec Il manque plusieurs fonctions pour la compatibilité PG (#132) · Issues · spip / ecrire · GitLab, Documentation dans la compatiblité PG (#133) · Issues · spip / ecrire · GitLab et Réécriture du code de compatibilité PG (#134) · Issues · spip / ecrire · GitLab :slight_smile:

Rebonjour ,

avec @marcimat, on envisageait de franchir un cap en s’appuyant sur PDO pour MySQL comme on le fait pour SQLite3 …

On se doute qu’on n’aura probablement pas le temps avant cette été, mais je me dit que pour les itérations suivantes de 5.x, il serait possible de bosser sur un composant SQL « un peu plus moderne » basé sur PDO … serais-tu intéressée pour nous rejoindre et poncer un peu le sujet pour intégrer, d’une manière ou d’une autre, pg dans cet hypothétique composant ?

1 « J'aime »

Bonjour

Utiliser PDO pour Postgresql est sans nul doute la bonne solution (je me demandais même pourquoi spip ne l’utilisait pas).

Oui je suis partante pour aider à ce futur composant qui sera la garantie de pouvoir utiliser n’importe quel moteur de base de données.

(plus que 2 PR)

4 « J'aime »