Thread: BUG #2984: Bug Creating or Updating a View

BUG #2984: Bug Creating or Updating a View

From
"Gabriel Bravo"
Date:
The following bug has been logged online:

Bug reference:      2984
Logged by:          Gabriel Bravo
Email address:      gbravo2k@yahoo.com
PostgreSQL version: 8.1.5
Operating system:   Windows XP Professional
Description:        Bug Creating or Updating a View
Details:

I had a view created as:

CREATE OR REPLACE VIEW vensamblado AS
 SELECT DISTINCT cuestionario.idcuestionario,
cuestionario.nombrecuestionario, riesgo.idriesgo, riesgo.nombreriesgo,
riesgo.resultado, pregunta.idpregunta, pregunta.nombrepregunta,
pregunta.tiporespuesta, pregunta.posicionrespuestas, pregunta.tipocontrol,
contenidocuestionario.ordenpregunta, opcion.idopcion, opcion.nombreopcion,
opcion.valor
   FROM contenidocuestionario
   JOIN cuestionario ON contenidocuestionario.idcuestionario =
cuestionario.idcuestionario
   JOIN riesgo ON contenidocuestionario.idriesgo = riesgo.idriesgo
   JOIN (pregunta
   JOIN opcion ON pregunta.idpregunta = opcion.idpregunta) ON
contenidocuestionario.idpregunta = pregunta.idpregunta
  ORDER BY cuestionario.idcuestionario, riesgo.idriesgo,
pregunta.idpregunta, contenidocuestionario.ordenpregunta,
opcion.nombreopcion, cuestionario.nombrecuestionario, riesgo.nombreriesgo,
riesgo.resultado, pregunta.nombrepregunta, pregunta.tiporespuesta,
pregunta.posicionrespuestas, pregunta.tipocontrol, opcion.idopcion,
opcion.valor;


I'm trying to replace that view because the ORDER clause is incorrect and I
want to change it. I'm changing with:

CREATE OR REPLACE VIEW vensamblado AS
 SELECT DISTINCT cuestionario.idcuestionario,
cuestionario.nombrecuestionario, riesgo.idriesgo,
    riesgo.nombreriesgo, riesgo.resultado, pregunta.idpregunta,
pregunta.nombrepregunta,
    pregunta.tiporespuesta, pregunta.posicionrespuestas, pregunta.tipocontrol,
contenidocuestionario.ordenpregunta,
    opcion.idopcion, opcion.nombreopcion, opcion.valor
   FROM contenidocuestionario
   JOIN cuestionario ON contenidocuestionario.idcuestionario =
cuestionario.idcuestionario
   JOIN riesgo ON contenidocuestionario.idriesgo = riesgo.idriesgo
   JOIN (pregunta
   JOIN opcion ON pregunta.idpregunta = opcion.idpregunta) ON
contenidocuestionario.idpregunta = pregunta.idpregunta
  ORDER BY cuestionario.idcuestionario, riesgo.idriesgo,
pregunta.idpregunta, contenidocuestionario.ordenpregunta,
opcion.nombreopcion;

And the view definition doesn't change !!!

Re: BUG #2984: Bug Creating or Updating a View

From
Tom Lane
Date:
"Gabriel Bravo" <gbravo2k@yahoo.com> writes:
> I had a view created as:

> CREATE OR REPLACE VIEW vensamblado AS
>  SELECT DISTINCT cuestionario.idcuestionario,
> cuestionario.nombrecuestionario, riesgo.idriesgo, riesgo.nombreriesgo,
> riesgo.resultado, pregunta.idpregunta, pregunta.nombrepregunta,
> pregunta.tiporespuesta, pregunta.posicionrespuestas, pregunta.tipocontrol,
> contenidocuestionario.ordenpregunta, opcion.idopcion, opcion.nombreopcion,
> opcion.valor
> ...
>   ORDER BY cuestionario.idcuestionario, riesgo.idriesgo,
> pregunta.idpregunta, contenidocuestionario.ordenpregunta,
> opcion.nombreopcion, cuestionario.nombrecuestionario, riesgo.nombreriesgo,
> riesgo.resultado, pregunta.nombrepregunta, pregunta.tiporespuesta,
> pregunta.posicionrespuestas, pregunta.tipocontrol, opcion.idopcion,
> opcion.valor;

> I'm trying to replace that view because the ORDER clause is incorrect and I
> want to change it.

It's not wrong and you can't fix it --- all the elements of the SELECT
DISTINCT list have to be included in the order-by list.  Any you omit
will get added in behind the scenes.

            regards, tom lane