Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / pg_catalog.json / 24 сообщений из 24, страница 1 из 1
27.11.2014, 11:15:07
    #38818189
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
Ребят, у меня есть функция, которая в объявлении возвращает "pg_catalog"."json"
Ну и в ретурне тип переменной тоже json. Но при запуске получаю ошибку:
a column definition list is only allowed for functions returning "record"

Как оно так выходит?
...
Рейтинг: 0 / 0
27.11.2014, 11:37:38
    #38818211
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

а как функция вызывается?
...
Рейтинг: 0 / 0
27.11.2014, 11:46:02
    #38818220
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
Alexius,

авторSELECT my_function('тонны json'a', 'тонны json'a')

соответственно начало ее такое:
авторCREATE OR REPLACE FUNCTION "public"."my_function"(json, json)
RETURNS "pg_catalog"."json" AS $BODY$

Самое странное в том, что на нескольких серверах она работает. А на одном вылезает такая ошибка. :-/
...
Рейтинг: 0 / 0
27.11.2014, 12:46:29
    #38818277
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
Сам json возвращаемый функцией формирую так:

for rec in execute('
SELECT * FROM t1..
')

loop
ret = rec.x;
end loop;
...
Рейтинг: 0 / 0
27.11.2014, 12:56:05
    #38818292
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

правильней вызывать через

Код: sql
1.
select * from my_function('тонны json'a', 'тонны json'a')
...
Рейтинг: 0 / 0
27.11.2014, 13:18:29
    #38818317
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
Alexius,

Спасибо за совет!
Но проблемы, к сожалению, это не решает :-(
...
Рейтинг: 0 / 0
27.11.2014, 14:12:39
    #38818394
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

очень странно, запрос точно в таком виде вызывается? может быть какая-то прослойка его модифицирует. Если прямо в psql вызвать - такая же ошибка?

если да - то какая версия постгреса ?
...
Рейтинг: 0 / 0
27.11.2014, 14:15:43
    #38818401
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
Alexius,

Нет, не пытаюсь без прослоек в таком же виде запустить - та же история.
PostgreSQL 9.3.4
...
Рейтинг: 0 / 0
27.11.2014, 14:20:35
    #38818406
думаецца
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

а слабо привести вызов полностью, и сообщение об ошибке со всем стеком.
ну и описание функции заодно.

думаю, у вас на "отдельном сервере" могут быть немного отдельные данные, в силу чего вы попадаете на ветку, которая вам и плюется ошибкой.
...
Рейтинг: 0 / 0
27.11.2014, 14:23:04
    #38818409
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

покажите тогда полностью код функции и с какими параметрами вызывается или лучше какой-нибудь тестовый пример где такая ошибка возникает. на 9.3.5 не смог воспроизвести.
...
Рейтинг: 0 / 0
27.11.2014, 14:34:25
    #38818420
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
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,"...

Как более подробную инфу об ошибке извлечь - я не знаю :-(
...
Рейтинг: 0 / 0
27.11.2014, 14:55:44
    #38818441
думаецца
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
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-параметры).
для этого случая список полей надо приводить руками при вызове.
...
Рейтинг: 0 / 0
27.11.2014, 15:13:00
    #38818458
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
думаецца,

Видимо я не понимаю вас, либо вы меня. вот тут http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1129158&msg=16912550
я писал о том, что функция объявлена, как возвращающая pg_catalog.json ну и в ретурне у меня джсон.

Но хоть за такие прояснения спасибо до сего момента я искренне верил что она ругается на то, что где-то определены поля, а для этого тип должен быть рекордом :-/
...
Рейтинг: 0 / 0
27.11.2014, 15:13:48
    #38818461
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

>< тэгами разобраться форумными не могу. Куда уж мне до постгреса
...
Рейтинг: 0 / 0
27.11.2014, 15:20:55
    #38818469
ну, этта
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
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.
SELECT * FROM f(...) AS t (fld1 integer, fld2 blahtype....)


гдже последующая конструкция и есть требуемый (рекваед) "колумн-дефенишн-лист"
...
Рейтинг: 0 / 0
27.11.2014, 15:34:03
    #38818485
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
При попытке так сделать на сервере где не работало - Ошибка осталось.
При попытке там, где работало - выдает ошибку

ERROR: a column definition list is only allowed for functions returning "record"
...
Рейтинг: 0 / 0
27.11.2014, 15:47:03
    #38818506
думаецца
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
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 для простынок есть тег "спойлер"
см
...
Рейтинг: 0 / 0
27.11.2014, 16:06:52
    #38818520
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

хорошо бы еще убедиться что на этом сервере функция действительно такая же, что на других. проверить можно через \sf functionname.
...
Рейтинг: 0 / 0
27.11.2014, 18:23:05
    #38818711
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
часть листинга

Код: 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.
CREATE OR REPLACE FUNCTION "public"."my_function"(json, json)
  RETURNS record AS $BODY$
  declare uniq text;
        rec record; 
        ret json;
        rb boolean;
        rec1 record;
        rc3 record;

begin
execute('
/* куча инсертов апдейтов и прочего */
')


--формируем результат
for rec in execute('
selcet err_msg from table1
')
loop
  ret = rec.x; 
 end loop;
return ret;

end;
$BODY$
LANGUAGE plpgsql VOLATILE;



вызов функции

Код: plsql
1.
SELECT * from my_function('{"user":1,"userId":1,"case_type_id":"1"}','{"user":1,"userId":1,"case_type_id":"1"}')




результат:
Код: plsql
1.
2.
3.
4.
SELECT * from my_function('{"user":1,"userId":1,"case_type_id":"1"}','{"user":1,"userId":1,"case_type_id":"1"}')
[Err] ERROR:  a column definition list is only allowed for functions returning "record"
LINE 2: SELECT * from my_function('{"user":1,"userI...
                      ^

...
Рейтинг: 0 / 0
27.11.2014, 19:30:28
    #38818768
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

а просто вызов


SELECT my_function('{"user":1,"userId":1,"case_type_id":"1"}','{"user":1,"userId":1,"case_type_id":"1"}');

работает?
...
Рейтинг: 0 / 0
27.11.2014, 19:34:06
    #38818770
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInja,

и зачем функция обьявлена как
RETURNS record

хотя 2 постами выше вы нас убеждали что
RETURNS "pg_catalog"."json"

вы уж разберитесь там у себя для начала.
...
Рейтинг: 0 / 0
27.11.2014, 19:55:28
    #38818785
этта
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
Maxim BogukVanillaNInja,

и зачем функция обьявлена как
RETURNS record

хотя 2 постами выше вы нас убеждали что
RETURNS "pg_catalog"."json"

вы уж разберитесь там у себя для начала. а ошибку отдает от другой ф-ии


ТС покажите
Код: sql
1.
SHOW search_path;
...
Рейтинг: 0 / 0
27.11.2014, 20:08:18
    #38818799
хехехе
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
VanillaNInjaчасть листинга

Код: plsql
1.
2.
3.
CREATE OR REPLACE FUNCTION "public"."my_function"(json, json)
  RETURNS record AS $BODY$
<>



вызов функции

Код: plsql
1.
2.
SELECT * from my_function('{"user":1,"userId":1,"case_type_id":"1"}','{"user":1,"userId":1,"case_type_id":"1"}') 
 /* а где, "a column definition list", на который ругается  ошибка ниже ? */  




результат:
Код: plsql
1.
2.
SELECT * from my_function('{"user":1,"userId":1,"case_type_id":"1"}','{"user":1,"userId":1,"case_type_id":"1"}')
[Err] ERROR:  a column definition list is only allowed for functions returning "record"



афтар походу упорот
всё со всем перепутал

кстати, откуда ошибку выводите ? [просто интересно]
ну и траву тоже хочу
...
Рейтинг: 0 / 0
28.11.2014, 11:36:25
    #38819251
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pg_catalog.json
хехехеафтар походу упорот

Видимо истинно так



Ребята прошу прощения. Оказалось все проще чем я думал. Ошибку создвала не сама функция, а вызов другой внутри нее. Хотя непонятно, почему в консоли не появилось сообщения об этом :-(
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / pg_catalog.json / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]