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 ответов

47 просмотров

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

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-е есть ссылка — можно почитать, если вдруг интересно. ;)

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта