recursive query "sch" column 1 has type character varying(500) in non-recursive term but type character varying overall
Может быть подскажите в какую сторону копать?
Сразу скажу предлагаемое решение принудительно привести к типу varchar(500) уже опробовал.
Заранее спасибо за наводки
запросик покажите, чтобы не гадать и код таблиц тоже не помешает
Боюсь запрос не влезет в рамки одного сообщения, поэтому приложу текстовый документ.
Ну а Вы выводимые типы посмотрите — мне вот \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 — я не вижу, чтобы где-то в документации это поведение было описано / считалось нормальным.
Извиняюсь, не совсем понял что такое "repro", можно попросить уточнить что это или ссылочкой поделиться для ознакомления? П.С. по вашей сноске, тоже немного не понял, чем varchar не соответствует "правильным PostgreSQL типам"?
Это 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
Да интересное поведеение, с ::text все отлично естеествеенно
Да, с таблицей беда😔, но не моя, её генерирует "черный ящик" в чужом ПО и хочет видеть её такой. За ссылки спасибо. С text действительно запустилась и отработало успешно.🤯 Спасибо за статью про типы, буду стараться использовать text. Про описать баг, к сожалению для меня немного затруднительно сейчас.
И что же, не будете писать bug report? ;)
В этот раз попробую, как раз выходные впереди, да и сообщество уже не в первый раз помогает, постараюсь описать чтобы в будущем в подобную проблему меньше людей угодили.(хотя такой корявый запрос еще нужно постараться сделать ☺️)
Да тут явно 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 именно Вы, в любом случае).
Создал Bug report: Your bug report has been received, and given id #17137
Если вдруг интересно, оказывается проблема стара как мир. и уже фиксировалась в версии 9,3 https://dba.stackexchange.com/questions/116218/surprising-results-for-data-types-with-type-modifier
Нет, это не "стара как мир" — они же даже bug report не написали! Мало кто из PostgreSQL hackers вообще ходит на stackoverflow, если что. А вот и fix: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5c056b0c2519e602c2e98bace5b16d2ecde6454b И да, действительно был другой thread, в самом деле, в commit-е есть ссылка — можно почитать, если вдруг интересно. ;)
Обсуждают сегодня