Conversion de type avec PostgreSQL
Tous les jours je reçois un message d'erreur généré par le script cron de mon logiciel de webmail Roundcube:
ERROR: [7] ERROR: operator does not exist: boolean = integer
LINE 1: DELETE FROM "contactgroups" WHERE "del" = 1 AND "changed" < ...
^
HINT: No operator matches the given name and argument type(s). You might need to
add explicit type casts. (SQL Query: DELETE FROM "contactgroups" WHERE "del" = 1
AND "changed" < '2018-12-04 00:00:00')
Il semble que l'erreur soit causée par une incompatibilité entre le schéma de la base de données et la requête SQL utilisée par le script de nettoyage.
Pour administrer mes bases de données PostgreSQL simplement j'utilise le logiciel web phpPgAdmin. En observant le schéma de la table contactgroups je note que le type de la colonne del est boolean. C'est incompatible avec la requête DELETE FROM "contactgroups" WHERE "del" = 1
car del devrait être un nombre entier (un int). PostreSQL est tâtillon avec les types, et ne convertit pas un entier en booléen implicitement, ce qui cause l'erreur.
J'avais importé cette base depuis MySQL vers PostgreSQL, ce qui a pu causer quelques incohérences avec la schéma attendu par Roundcube. Je vérifie que c'est le cas en comparant …
plus ...