Сравнение типов записей с разным количеством столбцов не дает сбоя - PullRequest
2 голосов
/ 08 февраля 2020

Почему следующий запрос not вызывает a "невозможно сравнить типы записей с разными числами столбцов" в PostgreSQL 11.6?

with
s AS (SELECT 1)
, main AS (
SELECT (a) = (b) , (a) = (a), (b) = (b), a, b -- I expect (a) = (b) fails
FROM s
  , LATERAL (select 1 as x, 2 as y) AS a
  , LATERAL (select 5 as x) AS b
)
select * from main;

В то время как этот делает:

with
x AS (SELECT 1)
, y AS (select 1, 2)
select (x) = (y) from x, y;

1 Ответ

4 голосов
/ 08 февраля 2020

См. Примечание в документах по сравнению строк

Ошибки, связанные с количеством или типом элементов, могут не возникать, если сравнение разрешено с использованием более ранних столбцов.

В этом случае, поскольку ax = 1 и bx = 5, он возвращает false, даже не замечая, что количество столбцов не совпадает. Измените их так, чтобы они совпадали, и вы получите то же исключение (именно поэтому и во втором запросе есть это исключение).

testdb=# with
s AS (SELECT 1)
, main AS (
SELECT a = b , (a) = (a), (b) = (b), a, b -- I expect (a) = (b) fails
FROM s
  , LATERAL (select 5 as x, 2 as y) AS a
  , LATERAL (select 5 as x) AS b
)
select * from main;
ERROR:  cannot compare record types with different numbers of columns
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...