Author: esj@rezo.net
Date: 2007-08-28 14:05:55 +0200 (mar, 28 aoû 2007)
New Revision: 10158
Log:
#209: un portage sans mauvaise surprise ça n'existe pas, la voilà. Contrairement à ce qu'on peut lire ici ou là sur la simulation de MySQL par PG, Replace n'est pas simplement simulable par "si Update ne modifie rien utiliser Insert", car si la table est à auto-incrément, PostGres, contrairement à MySQL, n'ajuste pas automatiquement sa valeur au maximum de la valeur courante et de la dernière valeur rentreée. Utiliser '''currval''' semble alors indispensable, mais en PG plusieurs tables PG peuvent partager le même compteur, d'où des accès concurrents que PG arbitre sans verrou par une méthode astucieuse qui provoque malheureusement un crytique ''currval is not yet defined in this session''.
Solution:
'''INSERT INTO T ...VALUES... RETURNING nextval('T_seq') < T_pkey)'''
et si ça retourne vrai
'''SELECT setval('T_seq', T_pkey) from T'''
Reste un problème avec la table des pétitions qui n'est pas déclarée par SPIP
comme ayant un auto-incrément, il faut affiner le test pour appliquer le code
ci-dessus quand même. A finir.
Modified:
spip/ecrire/base/db_pg.php