172 похожих чатов

Всем доброго дня! Кто-нибудь сталкивался с подобной ошибкой SQL Error [42804]: ERROR:

recursive query "sch" column 1 has type character varying(500) in non-recursive term but type character varying overall
Может быть подскажите в какую сторону копать?

Сразу скажу предлагаемое решение принудительно привести к типу varchar(500) уже опробовал.
Заранее спасибо за наводки

14 ответов

22 просмотра

запросик покажите, чтобы не гадать и код таблиц тоже не помешает

Alexey-Zhuravlev Автор вопроса
Сергей Кравчук
запросик покажите, чтобы не гадать и код таблиц то...

Боюсь запрос не влезет в рамки одного сообщения, поэтому приложу текстовый документ.

Alexey Zhuravlev
Боюсь запрос не влезет в рамки одного сообщения, п...

Ну а Вы выводимые типы посмотрите — мне вот \gdesc запроса из non-recursive term действительно показывает, что "recursive query "sch" column 1 has type character varying(500) in non-recursive term": Column | Type --------+------------------------ ids | character varying(500) names | character varying chlds | character varying cnt | character varying p_id | text h_id | text На первый взгляд кажется, что это bug, конечно (вот в том числе поэтому лучше использовать правильные PostgreSQL-овские типы, чтобы не натыкаться). Я бы на Вашем месте попробовал сделать repro — я не вижу, чтобы где-то в документации это поведение было описано / считалось нормальным.

Alexey-Zhuravlev Автор вопроса
Yaroslav Schekin
Ну а Вы выводимые типы посмотрите — мне вот \gdesc...

Извиняюсь, не совсем понял что такое "repro", можно попросить уточнить что это или ссылочкой поделиться для ознакомления? П.С. по вашей сноске, тоже немного не понял, чем varchar не соответствует "правильным PostgreSQL типам"?

Alexey Zhuravlev
Извиняюсь, не совсем понял что такое "repro", можн...

Это minimal [bug] reproduction code. ;) Вот это: https://dbfiddle.uk/?rdbms=postgres_13&fiddle=c3bfe57c351cc783399fad539d5690d0 И да, мне кажется, что что-то подобное недавно обсуждалось в -hackers — поищите. > по вашей сноске, тоже немного не понял, чем varchar не соответствует "правильным PostgreSQL типам"? См. https://ru-postgres.livejournal.com/65930.html Ну и вообще, в этой таблице нет ни одного правильно использованного типа данных — это прямо-таки "успех". ;) См. https://wiki.postgresql.org/wiki/Don%27t_Do_This

Yaroslav Schekin
Ну а Вы выводимые типы посмотрите — мне вот \gdesc...

Да интересное поведеение, с ::text все отлично естеествеенно

Alexey-Zhuravlev Автор вопроса
Yaroslav Schekin
Это minimal [bug] reproduction code. ;) Вот это: ...

Да, с таблицей беда😔, но не моя, её генерирует "черный ящик" в чужом ПО и хочет видеть её такой. За ссылки спасибо. С text действительно запустилась и отработало успешно.🤯 Спасибо за статью про типы, буду стараться использовать text. Про описать баг, к сожалению для меня немного затруднительно сейчас.

Alexey-Zhuravlev Автор вопроса
Yaroslav Schekin
И что же, не будете писать bug report? ;)

В этот раз попробую, как раз выходные впереди, да и сообщество уже не в первый раз помогает, постараюсь описать чтобы в будущем в подобную проблему меньше людей угодили.(хотя такой корявый запрос еще нужно постараться сделать ☺️)

Alexey Zhuravlev
В этот раз попробую, как раз выходные впереди, да ...

Да тут явно bug (мы там уже обсуждаем в IRC ;) ), вот несколько repro: Раз: WITH RECURSIVE t AS ( SELECT a::varchar AS b FROM ( SELECT 'a'::varchar(20) AS a ) AS x UNION ALL SELECT 'a'::varchar AS b FROM t ) SELECT * FROM t; Два: CREATE TABLE tm1(a varchar(20)); SELECT a, a::varchar FROM tm1 \gdesc Три: CREATE TABLE t(n) AS SELECT '5.5'::numeric(20, 2); SELECT n::numeric FROM t \gdesc Так что Вы можете всё это написать в bug report-е (нашли этот bug именно Вы, в любом случае).

Alexey-Zhuravlev Автор вопроса
Yaroslav Schekin
Да тут явно bug (мы там уже обсуждаем в IRC ;) ), ...

Создал Bug report: Your bug report has been received, and given id #17137

Alexey-Zhuravlev Автор вопроса
Yaroslav Schekin
Да тут явно bug (мы там уже обсуждаем в IRC ;) ), ...

Если вдруг интересно, оказывается проблема стара как мир. и уже фиксировалась в версии 9,3 https://dba.stackexchange.com/questions/116218/surprising-results-for-data-types-with-type-modifier

Alexey Zhuravlev
Если вдруг интересно, оказывается проблема стара к...

Нет, это не "стара как мир" — они же даже bug report не написали! Мало кто из PostgreSQL hackers вообще ходит на stackoverflow, если что. А вот и fix: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5c056b0c2519e602c2e98bace5b16d2ecde6454b И да, действительно был другой thread, в самом деле, в commit-е есть ссылка — можно почитать, если вдруг интересно. ;)

Похожие вопросы

Обсуждают сегодня

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
18
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта