No se puede cambiar el nombre de las columnas en las vistas de PostgreSQL con CREATE O REPLACE

37

En PostreSQL 8.3, estoy tratando de crear una vista que se parezca a una tabla existente pero que tenga diferentes nombres de columna.

Esto funciona

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;

Lo anterior hace un duplicado de la tabla family_tree pero el siguiente intento falla:

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;
  • ERROR: no se puede cambiar el nombre de la columna de vista "family_tree_id"

¿Cómo puedo cambiar el nombre de las columnas?

Aleksandr Levchuk
fuente

Respuestas:

45

Puedo reproducir su error ... en mi caso, creé una columna primero como 'fecha' y luego como 'x' (estaba tratando de ver si era un problema con una palabra reservada; no era:

ERROR:  cannot change name of view column "date" to "x"

Si emite un drop viewprimero, le permitirá volver a crear la vista con un nombre cambiado. No tengo idea de por qué create or replaceno lo haré.


Aclaración de Colin 't Hart :

La documentación para loCREATE VIEW explica bastante bien, creo:

La nueva consulta debe generar las mismas columnas que fueron generadas por la consulta de vista existente (es decir, los mismos nombres de columna en el mismo orden y con los mismos tipos de datos), pero puede agregar columnas adicionales al final de la lista.

Joe
fuente
De hecho, debe agregar la nueva columna al final de la lista de columnas SELECCIONAR , de lo contrario obtendrá el error.
1
Un comentario un poco fuera de tema: me he enfrentado a un problema similar cuando intenté agregar datos de dos tablas con la ayuda de la vista. Pero, de hecho, tenía diferentes tipos ( VARCHARen la primera tabla y TEXTen la segunda tabla) para las mismas columnas con nombre. ¡Pasé mucho tiempo investigando hasta que noté que IDE se muestra VARCHARpara ambas tablas! Solo puro pg_dumpme ayudó.
flaz14
31

También puede usar ALTER TABLE tbl RENAME COLUMN foo TO barpara cambiar el nombre de las columnas de vista.

Peter Eisentraut
fuente
Que hay tblaqui ¿Es la tabla real para la que se crea la vista o este es el nombre de la vista?
Eugen Konkov
@EugenKonkov Parece ser la vista. Lo probé y funciona
DatabaseShouter