On 5/25/20 6:40 PM, Tom Lane wrote: > Vik Fearing <v...@postgresfriends.org> writes: >> On 5/25/20 3:28 PM, Peter Eisentraut wrote: >>> I looked into this (changing the return types of date_part()/extract() >>> from float8 to numeric). > >> I think what would be better is to have a specific date_part function >> for each part and have extract translate to the appropriate one. > > Doesn't really work for upwards compatibility with existing views, > which will have calls to date_part(text, ...) embedded in them. > > Actually, now that I think about it, changing the result type of > date_part() is likely to be problematic anyway for such cases. > It's not going to be good if pg_upgrade's dump/restore of a view > results in a new output column type; especially if it's a > materialized view. > > So maybe what we'd have to do is leave date_part() alone for > legacy compatibility, and invent new functions that the extract() > syntax would now be translated to.
I'm sorry, I wasn't clear. I was suggesting adding new functions while also keeping the current generic function. So exactly what you say in that last paragraph. Although <extract expression> has a fixed list of constant parts, date_part() allows the part to be variable. So we need to keep it anyway for cases like this contrived example: SELECT date_part(p, now()) FROM UNNEST(ARRAY['epoch', 'year', 'second']) AS u (p) > While at it, maybe we could > fix things so that the syntax reverse-lists the same way instead > of injecting Postgres-isms... I'm not sure what this means. -- Vik Fearing