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

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

а как функция вызывается?
...
Рейтинг: 0 / 0
pg_catalog.json
    #38818220
VanillaNInja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
pg_catalog.json
    #38818277
VanillaNInja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам json возвращаемый функцией формирую так:

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

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

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

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

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

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

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

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

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

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

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

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

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

>< тэгами разобраться форумными не могу. Куда уж мне до постгреса
...
Рейтинг: 0 / 0
pg_catalog.json
    #38818469
ну, этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
pg_catalog.json
    #38818485
VanillaNInja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При попытке так сделать на сервере где не работало - Ошибка осталось.
При попытке там, где работало - выдает ошибку

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

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

Код: 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
pg_catalog.json
    #38818768
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanillaNInja,

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


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

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

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

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

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

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

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

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


ТС покажите
Код: sql
1.
SHOW search_path;
...
Рейтинг: 0 / 0
pg_catalog.json
    #38818799
хехехе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
pg_catalog.json
    #38819251
VanillaNInja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хехехеафтар походу упорот

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



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


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