Обсуждение: BUG #5199: Window frame clause wrong (?) behaviour
The following bug has been logged online:
Bug reference: 5199
Logged by: Iliya Krapchatov
Email address: my_working@inbox.ru
PostgreSQL version: 8.4.1
Operating system: Windows XP
Description: Window frame clause wrong (?) behaviour
Details:
I am new at WINDOW clause using so maybe I've missed something. Following is
the sequence of steps to repeat the problem:
create table t( pk integer );
insert into t(pk) values( 1 );
insert into t(pk) values( 2 );
select first_value( pk ) OVER ( pkw ) FROM t
WINDOW pkw AS ( PARTITION BY pk ORDER BY pk RANGE BETWEEN UNBOUNDED
PRECEDING AND UNBOUNDED FOLLOWING );
I see following lines in response:
---
ERROR: cannot override frame clause of window "pkw"
LINE 1: select first_value( pk ) OVER ( pkw ) FROM t
^
********** Error **********
ERROR: cannot override frame clause of window "pkw"
SQL state: 42P20
ХаÑакÑеÑиÑÑика:31
---
I believe that is a bug because next two queries work fine:
select first_value( pk ) OVER ( PARTITION BY pk ORDER BY pk RANGE BETWEEN
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) FROM t;
select first_value( pk ) OVER ( pkw ) FROM t
WINDOW pkw AS ( PARTITION BY pk ORDER BY pk );
Iliya Krapchatov wrote: > select first_value( pk ) OVER ( pkw ) FROM t > WINDOW pkw AS ( PARTITION BY pk ORDER BY pk RANGE BETWEEN UNBOUNDED > PRECEDING AND UNBOUNDED FOLLOWING ); > > I see following lines in response: > --- > ERROR: cannot override frame clause of window "pkw" > LINE 1: select first_value( pk ) OVER ( pkw ) FROM t Try without the parenthesis in OVER: select first_value( pk ) OVER pkw FROM t WINDOW pkw AS ( PARTITION BY pk ORDER BY pk RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ); I'm quite surprised by the error message that produces, though... -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> writes:
> Try without the parenthesis in OVER:
> ...
> I'm quite surprised by the error message that produces, though...
It's actually correct: the syntax with parens specifies copying
and modifying the named WINDOW definition, but you're not allowed to
copy-and-modify a definition that has a FRAME clause. (Why the spec
says that is beyond me; replacing the FRAME clause seems sensible
enough, but ...)
This isn't terribly well explained in our docs, as far as I can
find at the moment. The SELECT reference page mentions the rule
in the context of a dependent WINDOW-clause definition, but
doesn't explain that OVER with parens acts the same way.
And maybe the error message wording could be improved.
regards, tom lane