2010-08-29 343 views
13

PostgreSQL no permite modificar una vista (es decir, agregar columnas, cambiar órdenes de columnas, agregar criterios, etc.) si tiene objetos dependientes. Esto es realmente conseguir molesto, ya que tiene que escribir un script para:Cómo ALTERAR una vista en PostgreSQL

  1. gota todos los objetos dependientes,
  2. alterar la visión,
  3. volver a crear todos los objetos dependientes de nuevo.

Entiendo que los desarrolladores de postgreSQL tienen preocupaciones muy razonables para evitar la alteración de las vistas. ¿Pero ustedes tienen algún guión/corte de corte para hacer todas esas cosas manuales en una sola carrera?

Respuesta

4

Agregar nuevas columnas no es un problema, cambiar los tipos de datos o cambiar el orden de las columnas, de ahí se obtienen problemas.

  1. No cambie el orden, no es tan importante todos modos, sólo cambiar la consulta:

    SELECT a, b DE view_name;

    SELECCIONAR b, a FROM view_name;

  2. Cuando tenga que cambiar un tipo de datos de una columna, debe verificar los objetos dependientes también. Estos pueden tienen problemas con este nuevo tipo de datos . Simplemente obtenga la definición de este objeto y vuelva a crear después de los cambios . El information_schema y pg_catalog lo ayudan.

  3. Realice todos los cambios en una sola transacción .
+0

Agregar una columna es un problema cuando la vista tiene objetos dependientes. Prueba esto; CREATE TABLE uno ( col_a INT, col_b VARCHAR (2), col_c FECHA ); CREAR O REEMPLAZAR ver vw_one AS SELECCIONAR col_a, col_b DESDE uno; CREAR O REEMPLAZAR VISTA vw_two AS SELECCIONAR col_a, col_b FROM vw_one; CREAR O REEMPLAZAR VISTA vw_one AS SELECCIONAR col_a, col_b, col_c DESDE uno; ¿Me falta algo? – mevdiven

+0

Funciona bien aquí, 9.0beta4. No tengo versiones anteriores en mi máquina de desarrollo, pero debería funcionar en 8.4 también. ¿Qué mensaje de error recibes? –

+0

Es posible que hayan corregido la versión 9.0. Vi un par de solicitudes de corrección de errores en la comunidad postgreSQL. Aquí está el error que estoy recibiendo. ERROR: no se puede cambiar el número de columnas en la vista Estado del SQL: 42P16 – mevdiven

1

Si coloco un complemento "drop view xyz; commit;" antes de la declaración "crear o reemplazar vista xyz como ...", al menos en muchos casos resuelvo el problema de bloqueo descrito anteriormente.

Cuestiones relacionadas