Оператор PostgreSQL не существует для массива плавающих чисел - PullRequest
0 голосов
/ 03 ноября 2018

Определение моего столбца array2 double precision[] NOT NULL.

У меня 2 запроса.

select *
from test
where ARRAY[1.1, 2.2, 3.3] <@ array2;

и

select *
from test
where '{1.1, 2.2, 3.3}' <@ array2;

Второй работает нормально, но первый дает мне ERROR: operator does not exist: numeric[] <@ double precision[].

Приведение типов помогает, но почему без него не работает?

select *
from test
where ARRAY[1.1, 2.2, 3.3]::double precision[] <@ array2;

1 Ответ

0 голосов
/ 03 ноября 2018

Синтаксис с array, в отличие от другого, позволяет синтаксическому анализатору немедленно разрешать тип выражения:

select '{1.2}', pg_typeof('{1.2}'), array[1.2], pg_typeof(array[1.2])

 ?column? | pg_typeof | array | pg_typeof 
----------+-----------+-------+-----------
 {1.2}    | unknown   | {1.2} | numeric[]
(1 row)

Тип '{1.2}' равен unknown, и он разрешается на более позднем этапе, когда применяется оператор. Тип правого операнда подходит, поэтому unknown успешно разрешено до double prcission[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...