Anomalie #7012
ferméERROR: cannot change name of view column "a" to "b"
100%
Description
Lors d'une migration d'un dynacase-core-3.2.14 vers dynacase-core-3.2.23 j'ai observé une erreur PHP/Pg non-fatale lors de la régénération d'une vue family.xxx avec une erreur du type :
ERROR: cannot change name of view column "a" to "b"
Le problème est avec l'instruction "CREATE OR REPLACE VIEW vvv AS SELECT col1, ..., colN" qui ne fonctionne que si l'ordre des colonnes "col1, ..., colN" reprend les colonnes précédentes dans le même ordre (c'est le point important) en ajoutant ensuite les colonnes additionnelles.
- https://www.postgresql.org/docs/9.1/static/sql-createview.html :
The new query must generate the same columns that were generated by the existing view query (that is, the same column names in the same order and with the same data types), but it may add additional columns to the end of the list.
Par conséquent si on crée un vue avec les colonnes "a, b", qu'on ajoute un colonne "c" et qu'on fait un "CREATE OR REPLACE" avec l'ordre "b, a, c" on a alors ce type d'erreur :
BEGIN;
CREATE TABLE t1 (a text, b text);
CREATE VIEW v1 AS SELECT a, b FROM t1;
ALTER TABLE t1 ADD COLUMN c text;
CREATE OR REPLACE VIEW v1 AS SELECT b, a, c FROM t1;
ROLLBACK;
BEGIN CREATE TABLE CREATE VIEW ALTER TABLE ERROR: cannot change name of view column "a" to "b" ROLLBACK
Il semble donc que la régénération de la vue ne conserve pas l'ordre des colonnes : il faudrait s'assurer que l'ordre est conservé (si c'est possible), ou bien passer par un "BEGIN" + "DROP VIEW IF EXISTS ..." + "CREATE VIEW ..." + "COMMIT" (qui devrait fonctionner quelque soit l'ordre) ?
Mis à jour par Éric Brison il y a plus de 8 ans
- Statut changé de Nouveau à Intégré
Appliqué par commit internal-platfrom:commit:70be008d2e2ff87350cb276d50178181b3015bbe.