Re: [HACKERS] lag(bigint,int,int), etc?
От | Colin 't Hart |
---|---|
Тема | Re: [HACKERS] lag(bigint,int,int), etc? |
Дата | |
Msg-id | DBF1D9D2-A922-445B-93DF-F6640874BB71@gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] lag(bigint,int,int), etc? (Merlin Moncure <mmoncure@gmail.com>) |
Ответы |
Re: [HACKERS] lag(bigint,int,int), etc?
|
Список | pgsql-hackers |
On 27 Jun 2017, at 17:06, Merlin Moncure <mmoncure@gmail.com> wrote: > >> On Tue, Jun 27, 2017 at 10:01 AM, Colin 't Hart <colinthart@gmail.com> wrote: >> Hi, >> >> The following rather contrived example illustrates that lag(), lead() >> (and probably other functions) can't automatically cast an integer to >> a bigint: >> >> select lag(sum,1,0) over () from (select sum(generate_series) over >> (order by generate_series) from generate_series(1,10)) x; >> ERROR: function lag(bigint, integer, integer) does not exist >> LINE 1: select lag(sum,1,0) over () from (select sum(generate_series... >> ^ >> HINT: No function matches the given name and argument types. You >> might need to add explicit type casts. >> >> >> I guess this is because the lag() and lead() functions take any type, >> and hence the default must be of the same type. >> This had me stumped for a few while until I realised that the types >> were different. >> >> Would there be any way to implement an automatic conversion? >> >> On the off-chance that this is actually a bug, this is on 9.6.3, but >> it also occurs on 9.3.17 > > Why not cast the arguments? The first and the third argument have to > be the same, and the second argument is always int. > > merlin I know that I can cast. I'm wondering if it would be possible/desirable to implement automatic casting. Automatic castingworks already for functions defined to take bigint and you pass in an integer. But not for these functions that takeany type. /Colin
В списке pgsql-hackers по дате отправления: