powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры
19 сообщений из 19, страница 1 из 1
Вызов хранимой процедуры
    #32718269
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При вызове хранимой процедуры (любой, созданной пользователем) происходит дисконнект с базой... В чем может быть дело?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32722947
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в шаманский танец с бубном по существу вопроса не помогает ? странно.

Детальнее нельзя ли описать.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32722961
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смущает меня словосочетание "созданной пользователем" :) Проверь, не залазит ли процедура в чужую память или что-либо такое.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723432
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поробую объяснить ситуацию подробнее:

Вот как происходит дисконнект:
registr=# select aaa(2);
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

функция следующая:
СREATE OR REPLACE FUNCTION "public"."aaa" (integer) RETURNS SETOF integer AS'
/* New function body */
declare
p_p alias for $1
begin
return p_p;
end;
'LANGUAGE 'plpsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Где грабли, подскажите?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723571
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако очепяток у вас много. :-(

CREATE OR REPLACE FUNCTION "public"."aaa" (integer) RETURNS integer AS'
/* New function body */
declare
p_p alias for $1;
begin
return p_p;
end;
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Или вам нужна SETOF функция?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723583
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала.... Не 'plpsql' а 'plpgsql'
IMHO если удается обвалить сессию при обращении
к любой функции на PL/pgsql - значит просто незодорово
собран его обработчик.... Еще не повредит заглянуть
в лог постгреса - мож там он написал тебе пару матюков
которые застеснялсяв stderr вывалить...
Кстати пользовательские функции на sql работают?
И неплохо б уточнить весию слоника и что у тебя за ОС.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723699
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat
опечаток здесь нет, кроме CREATE, все прекрасно создается и проходит без ошибок
Shweik
'plpgsql' дает тот же результат, что и 'plpsql'
PostgreSQL 7.4.1.
крутиться это все на Red Hat Linux release 7.2 (Enigma)
Kernel 2.4.7-10 on an i686
запросы типа: 'select current_user' работают нормально
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723754
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphin1опечаток здесь нет, кроме CREATE, все прекрасно создается и проходит без ошибок

У меня - вовсе не "прекрасно". :-(

dump=# CREATE OR REPLACE FUNCTION "public"."aaa" (integer) RETURNS integer AS'
dump'# /* New function body */
dump'# declare
dump'# p_p alias for $1;
dump'# begin
dump'# return p_p;
dump'# end;
dump'# 'LANGUAGE 'plpsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
ERROR: language "plpsql" does not exist

dump=# CREATE OR REPLACE FUNCTION "public"."aaa" (integer) RETURNS SETOF integer AS'
dump'# /* New function body */
dump'# declare
dump'# p_p alias for $1;
dump'# begin
dump'# return p_p;
dump'# end;
dump'# 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
CREATE FUNCTION
dump=# select aaa(1);
WARNING: Error occurred while executing PL/pgSQL function aaa
WARNING: while casting return value to function's return type
ERROR: Set-valued function called in context that cannot accept a set

dump=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 7.3.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723801
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat
Если без SETOF у меня вылазит ошибка:ERROR: cannot change return type of existing function :(
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723864
mik_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сначала drop function сделай. чтобы не ругалось на изменение возвращаемого типа.
ИМХО, если plpgsql = plplsql то дело полный швах :(
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723905
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphin1Если без SETOF у меня вылазит ошибка:ERROR: cannot change return type of existing function :("Use DROP FUNCTION first."
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723943
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat
c DROP все понятно, но это проблему не решает... создание процедуры у меня проходит нормально, а вот при вызове( что-то типа: select aaa(1);) происходит полнейший дисконнект по прежнему :( Он хоть бы ругнулся как родной по-человечески..., а тут вываливается сразу... может настроики хитрые есть самого сервера?
а может здесь что-то не так?:

CREATE OR REPLACE FUNCTION "public"."plpgsql_call_handler" () RETURNS "pg_catalog"."language_handler" AS'
plpgsql_call_handler
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

CREATE TRUSTED PROCEDURAL LANGUAGE "plpgsql" HANDLER "public"."plpgsql_call_handler";

CREATE PROCEDURAL LANGUAGE "plpsql" HANDLER "public"."plpgsql_call_handler";
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32723999
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphin1создание процедуры у меня проходит нормально, а вот при вызове( что-то типа: select aaa(1);) происходит полнейший дисконнект по прежнему :(Вы SETOF убрали?

Приведите точный текст выполняемых вами команд "create function" и "select".
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32724023
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat
вот CREATE:

drop function "public"."aaa"(integer);
CREATE OR REPLACE FUNCTION "public"."aaa" (integer) RETURNS integer AS'
declare
p_p alias for $1;
begin
return p_p;
end;
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

а вот SELECT:

select aaa(1);
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32724033
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня ваш код работает нормально.

dump=# drop function "public"."aaa"(integer);
DROP FUNCTION
dump=# CREATE OR REPLACE FUNCTION "public"."aaa" (integer) RETURNS integer AS'
dump'# declare
dump'# p_p alias for $1;
dump'# begin
dump'# return p_p;
dump'# end;
dump'# 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
CREATE FUNCTION
dump=# select aaa(1);
aaa
-----
1
(1 row)
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32724060
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat
тогда похоже дело в самом серваке... Может быть от того, что компильнули или сконфигурировали его неправильно?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32724860
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я понимаю - влом пользоваться стандартной (с в 7.0.1) прогой
по добавлению языков в базу - createlang.
Так хоть доку почитать неплохо бы 8))
Тогда бы и бреда меньше плодили бы. Я про вот ето:

CREATE OR REPLACE FUNCTION "public"."plpgsql_call_handler" () RETURNS "pg_catalog"."language_handler" AS'
plpgsql_call_handler
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

CREATE TRUSTED PROCEDURAL LANGUAGE "plpgsql" HANDLER "public"."plpgsql_call_handler";

CREATE PROCEDURAL LANGUAGE "plpsql" HANDLER "public"."plpgsql_call_handler";

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
    AS '$libdir/plpgsql', 'plpgsql_call_handler'
    LANGUAGE c;
CREATE FUNCTION plperl_call_handler() RETURNS language_handler
    AS '$libdir/plperl', 'plperl_call_handler'
    LANGUAGE c;
CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler;
CREATE PROCEDURAL LANGUAGE plperlu HANDLER plperl_call_handler;
Ну plperl можешь выкинуть - тебе он небось и даромне нужен
и если сомневаешься что прописано у тебя в $libdir - пиши
просто путь к каталогу с plpgsql.so (Да кстати а есть ли вообще у Вас на диске файл plpgsql.so ??? 8_))
Вот и вся басня - причем вся эта кухня неизменна с v6.3.x
А если кто мне не верит - спросите у знатоков, а еще лучше скиньте дамп с
любой базы постгреса в которой работают PL языки и изучите его.
Нет этож надо додуматься - написать обработчик интерпертируемого языка на нем самом..... 8-))) Думаю примеров таких подвигов не так-то много ;-\)
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32726140
delphin1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shweik
не судите строго, с PostgreSQL работаю всего 2 недели, еще только разбираюсь.... перемудрил, бывает:D Теперь ВСЁ работает, спасибо:)
Но все равно осталось не понятным почему происходил дисконнект.... можно было же ругнуться по-человечески.... и все бы стало ясно.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры
    #32726759
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я думаю он ругнулся.... в $PGDATA/serverlog ;)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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