Re: valid casts to anyarray

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: valid casts to anyarray
Дата
Msg-id 606024.1695826224@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: valid casts to anyarray  (Philip Carlsen <plcplc@gmail.com>)
Список pgsql-general
Philip Carlsen <plcplc@gmail.com> writes:
> I've been down a rabbit hole today trying to understand what exactly makes
> a type a valid candidate for an ANYARRAY function argument (e.g., something
> you can 'unnest()').

Per the comments for check_generic_type_consistency:

 * 2) All arguments declared ANYARRAY must have the same datatype,
 *      which must be a varlena array type.

If you follow that code down you eventually find that it expects
get_element_type() to succeed, and that says

 * NB: this only succeeds for "true" arrays having array_subscript_handler
 * as typsubscript.  For other types, InvalidOid is returned independently
 * of whether they have typelem or typsubscript set.

which is mechanized as an IsTrueArrayType() check.

> My reading has led me across such functions as 'get_promoted_array_type',
> 'IsTrueArrayType', 'can_coerce_type', and 'check_generic_type_consistency',
> and this has led me to believe that any type which has a valid (i.e.,
> non-zero?) pg_type.typelem defined should be applicable.

It has to not only have an element type, but have a standard array
header, else we don't know how to do a lot of operations on it.

Type "point" and related animals are sort of a poor man's array,
which is supported for basic subscripting operations, but it's not
generic enough to be reasonable to consider as an ANYARRAY.

            regards, tom lane



В списке pgsql-general по дате отправления:

Предыдущее
От: Laurenz Albe
Дата:
Сообщение: Re: valid casts to anyarray
Следующее
От: Mark Hill
Дата:
Сообщение: pg*.dll in psqlODBC have no version numbers