|
|
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
Ребят, у меня есть функция, которая в объявлении возвращает "pg_catalog"."json" Ну и в ретурне тип переменной тоже json. Но при запуске получаю ошибку: a column definition list is only allowed for functions returning "record" Как оно так выходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 11:15:07 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, а как функция вызывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 11:37:38 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
Alexius, авторSELECT my_function('тонны json'a', 'тонны json'a') соответственно начало ее такое: авторCREATE OR REPLACE FUNCTION "public"."my_function"(json, json) RETURNS "pg_catalog"."json" AS $BODY$ Самое странное в том, что на нескольких серверах она работает. А на одном вылезает такая ошибка. :-/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 11:46:02 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
Сам json возвращаемый функцией формирую так: for rec in execute(' SELECT * FROM t1.. ') loop ret = rec.x; end loop; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 12:46:29 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, правильней вызывать через Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 12:56:05 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
Alexius, Спасибо за совет! Но проблемы, к сожалению, это не решает :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 13:18:29 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, очень странно, запрос точно в таком виде вызывается? может быть какая-то прослойка его модифицирует. Если прямо в psql вызвать - такая же ошибка? если да - то какая версия постгреса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 14:12:39 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
Alexius, Нет, не пытаюсь без прослоек в таком же виде запустить - та же история. PostgreSQL 9.3.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 14:15:43 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, а слабо привести вызов полностью, и сообщение об ошибке со всем стеком. ну и описание функции заодно. думаю, у вас на "отдельном сервере" могут быть немного отдельные данные, в силу чего вы попадаете на ветку, которая вам и плюется ошибкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 14:20:35 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, покажите тогда полностью код функции и с какими параметрами вызывается или лучше какой-нибудь тестовый пример где такая ошибка возникает. на 9.3.5 не смог воспроизвести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 14:23:04 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
Alexius, К сожалению всю функцию привести не могу. :-( Да и большая она и неинтересная. Тыщщи 1,5 строк. Она получает джисон. Распихивает его по таблицам. Потом вышеуказанной конструкцией селектит в переменную типа json то что распихалось из мтоговых таблиц и возваращает. SELECT * select * from my_function('...') [Err] ERROR: a column definition list is required for functions returning "record" LINE 2: SELECT * from from my_function('{"user":1,"... Как более подробную инфу об ошибке извлечь - я не знаю :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 14:34:25 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInjaAlexius, К сожалению всю функцию привести не могу. :-( Да и большая она и неинтересная. Тыщщи 1,5 строк. Она получает джисон. Распихивает его по таблицам. Потом вышеуказанной конструкцией селектит в переменную типа json то что распихалось из мтоговых таблиц и возваращает. SELECT * select * from my_function('...') [Err] ERROR: a column definition list is required for functions returning "record" LINE 2: SELECT * from from my_function('{"user":1,"... Как более подробную инфу об ошибке извлечь - я не знаю :-( вам пишут, что вы определили ф-ю как возвращающую reсord, при этом при вызове не описали поля и типы (а в объявлении ф-ии не описали их же как out-параметры). для этого случая список полей надо приводить руками при вызове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 14:55:44 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
думаецца, Видимо я не понимаю вас, либо вы меня. вот тут http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1129158&msg=16912550 я писал о том, что функция объявлена, как возвращающая pg_catalog.json ну и в ретурне у меня джсон. Но хоть за такие прояснения спасибо до сего момента я искренне верил что она ругается на то, что где-то определены поля, а для этого тип должен быть рекордом :-/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 15:13:00 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, >< тэгами разобраться форумными не могу. Куда уж мне до постгреса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 15:13:48 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInjaAlexius, К сожалению всю функцию привести не могу. :-( Да и большая она и неинтересная. Тыщщи 1,5 строк. Она получает джисон. Распихивает его по таблицам. Потом вышеуказанной конструкцией селектит в переменную типа json то что распихалось из мтоговых таблиц и возваращает. SELECT * select * from my_function('...') [Err] ERROR: a column definition list is required for functions returning "record" LINE 2: SELECT * from from my_function('{"user":1,"... Как более подробную инфу об ошибке извлечь - я не знаю :-( Вам пишут буквально следующее: "требуется лист[овка] определения колонок для функции, возвращающей рекорд. " откуда мораль : 1. кто-то вызвал функцию [прямо или косвенно], тип возврата которой он же определил как "рекорд" 2. кто-то, при объявлении функции, не побеспокоился описать поля возврата ( в этом и только в этом случае постгрес требует ручного описания простынки типа Код: sql 1. гдже последующая конструкция и есть требуемый (рекваед) "колумн-дефенишн-лист" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 15:20:55 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
При попытке так сделать на сервере где не работало - Ошибка осталось. При попытке там, где работало - выдает ошибку ERROR: a column definition list is only allowed for functions returning "record" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 15:34:03 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, вам давно сказали -- приведите весь кейс 1. описание ф-ии. целиком, или хотя бы всю шапку. (без body) 2. вызов, целиком, [или сократив только длинные значения параметров] 3. ошибки тут же -- целиком. а не неправдоподобные огрызки авторSELECT * select * from my_function('...') [Err] ERROR: a column definition list is required for functions returning "record" LINE 2: SELECT * from from my_function('{"user":1,"... -- с такими огрызками -- ковыряйтесь сами PS для простынок есть тег "спойлер" см ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 15:47:03 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, хорошо бы еще убедиться что на этом сервере функция действительно такая же, что на других. проверить можно через \sf functionname. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 16:06:52 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
часть листинга Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. вызов функции Код: plsql 1. результат: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 18:23:05 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, а просто вызов SELECT my_function('{"user":1,"userId":1,"case_type_id":"1"}','{"user":1,"userId":1,"case_type_id":"1"}'); работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 19:30:28 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, и зачем функция обьявлена как RETURNS record хотя 2 постами выше вы нас убеждали что RETURNS "pg_catalog"."json" вы уж разберитесь там у себя для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 19:34:06 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
Maxim BogukVanillaNInja, и зачем функция обьявлена как RETURNS record хотя 2 постами выше вы нас убеждали что RETURNS "pg_catalog"."json" вы уж разберитесь там у себя для начала. а ошибку отдает от другой ф-ии ТС покажите Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 19:55:28 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
VanillaNInjaчасть листинга Код: plsql 1. 2. 3. вызов функции Код: plsql 1. 2. результат: Код: plsql 1. 2. афтар походу упорот всё со всем перепутал кстати, откуда ошибку выводите ? [просто интересно] ну и траву тоже хочу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 20:08:18 |
|
||
|
pg_catalog.json
|
|||
|---|---|---|---|
|
#18+
хехехеафтар походу упорот Видимо истинно так Ребята прошу прощения. Оказалось все проще чем я думал. Ошибку создвала не сама функция, а вызов другой внутри нее. Хотя непонятно, почему в консоли не появилось сообщения об этом :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 11:36:25 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=119&tid=1998320]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 318ms |

| 0 / 0 |
