Closed alhyss closed 2 years ago
Erreur reproduite sous PostgreSQL 10 et 11 lorsque la mise à jour est lancée par une commande directe. La mise à jour s'effectue normalement lorsque la commande est exécutée par une fonction plpgsql (cf. fonctions z_plume_recette.t003()
et z_plume_recette.t018()
et z_plume_recette.t019()
de la recette), sauf à ce qu'Asgard soit actif sur la base. Dans ce cas, le message d'erreur est ALTER TYPE ... ADD ne peut pas être exécuté dans un bloc de transaction
(testé uniquement sous PostgreSQL 10).
Sous PostgreSQL 12, 13 et 14, la mise à jour se déroule sans erreur, y compris avec Asgard.
Edit 1 : C'est effectivement une amélioration mentionnée dans la note de version de PostgreSQL 12.
Allow enumerated values to be added more flexibly (Andrew Dunstan, Tom Lane, Thomas Munro)
Previously, ALTER TYPE ... ADD VALUE could not be called in a transaction block, unless it was part of the same transaction that created the enumerated type. Now it can be called in a later transaction, so long as the new enumerated value is not referenced until after it is committed.
Edit 2 : Si les fonctions de la recette passent, c'est grâce au CREATE EXTENSION plume_pg VERSION '0.0.1' ;
qui y précède toujours le ALTER EXTENSION plume_pg UPDATE ;
. Concrètement la commande CREATE TYPE
et la commande ALTER TYPE ... ADD VALUE
font bien partie de la même transaction.
Corrigé pour la version 0.1.1 de PlumePg, qui sera diffusée parallèlement à Plume 0.4.1.
La commande ALTER TYPE ... ADD VALUE
du script de mise à jour est remplacée par une suppression/recréation du type, avec gestion des dépendances.
Avant :
-- Type: z_plume.meta_compute
ALTER TYPE z_plume.meta_compute ADD VALUE 'empty' AFTER 'auto' ;
ALTER TYPE z_plume.meta_compute ADD VALUE 'new' AFTER 'empty' ;
Après :
-- Type: z_plume.meta_compute
DROP VIEW z_plume.meta_template_categories_full ;
ALTER TABLE z_plume.meta_categorie
ALTER COLUMN compute TYPE text[] ;
ALTER TABLE z_plume.meta_template_categories
ALTER COLUMN compute TYPE text[] ;
DROP CAST (text[] AS z_plume.meta_compute[]) ;
DROP TYPE z_plume.meta_compute ;
CREATE TYPE z_plume.meta_compute AS ENUM (
'auto', 'empty', 'new', 'manual'
) ;
COMMENT ON TYPE z_plume.meta_compute IS 'Types de fonctionnalités de calcul des métadonnées supportées par Plume.' ;
CREATE CAST (text[] AS z_plume.meta_compute[])
WITH INOUT
AS IMPLICIT ;
ALTER TABLE z_plume.meta_categorie
ALTER COLUMN compute TYPE z_plume.meta_compute[] ;
ALTER TABLE z_plume.meta_template_categories
ALTER COLUMN compute TYPE z_plume.meta_compute[] ;
-- la vue est recréée plus loin
Signalé par la DDT 16 le 14 juin 2022.
L'exécution de la commande
ALTER EXTENSION plume_pg UPDATE ;
donne lieu à l'erreur suivante sous PostgreSQL 10 :