powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функции и транзакции
25 сообщений из 39, страница 1 из 2
Функции и транзакции
    #39287939
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли определить находясь в функции - была ли она вызвана в транзакции?
Возможно, у меня неправильный подход, но вот пример, навеянный подходом в SQL Server

Функция1
----------
...
если вызвана НЕ в открытой транзакции -
{
begin transaction;
}

..
вызов Функции2();
если была ошибка
{
если транзакция открыта в этой функции rollback;
return;
}
...
commit;
--------------end


Функция2
----------
...
если вызвана НЕ в открытой транзакции -
{
begin transaction;
}

..
...
если транзакция окрыта в этой функции
{
commit or rollback;
}
вернуть код или exception;
-------------- end


Какая практика в PostgreSQL?
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287942
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

в postgresql хранимки выполняются всегда в транзакции.
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287950
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijРолг Хупин,

в postgresql хранимки выполняются всегда в транзакции.


Да, нашел, что в функциях нельзя открывать/закрывать транзакции.

Правильно ли я понимаю:

Код: sql
1.
select myfunc(1); -- выполняется в автоматически создаваемой транзакции?



что надо сделать внутри функции, если посреди выполнения что-то возникло, чтобы откатить эту транзакцию до начала функции?
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287953
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинMelkijРолг Хупин,

в postgresql хранимки выполняются всегда в транзакции.


Да, нашел, что в функциях нельзя открывать/закрывать транзакции.

Правильно ли я понимаю:

Код: sql
1.
select myfunc(1); -- выполняется в автоматически создаваемой транзакции?



что надо сделать внутри функции, если посреди выполнения что-то возникло, чтобы откатить эту транзакцию до начала функции?

savepoint в доке postgresql.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287955
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, вот такой запрос практически не имеет смысла, поскольку по факту - одна транзакция (в функции)?

Код: sql
1.
2.
3.
begin transaction;
select myfunc(1);
commit;
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287957
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупинпропущено...



Да, нашел, что в функциях нельзя открывать/закрывать транзакции.

Правильно ли я понимаю:

Код: sql
1.
select myfunc(1); -- выполняется в автоматически создаваемой транзакции?



что надо сделать внутри функции, если посреди выполнения что-то возникло, чтобы откатить эту транзакцию до начала функции?

savepoint в доке postgresql.

--
Maxim Boguk
www.postgresql-consulting.ru

я имел в виду немного другое наверное

функция выполняется всегда в своей транзакции, и если все ок, то будет выполнен неявный коммит.
Как надо завершить или что надо сделать в функции, чтобы она завершилась своим неявным роллбэком?
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287961
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинMaxim Bogukпропущено...


savepoint в доке postgresql.

--
Maxim Boguk
www.postgresql-consulting.ru

я имел в виду немного другое наверное

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

RAISE EXCEPTION сделать.

Или вызывать в явной транзакции и по результатам делать commit или rollback.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287971
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупинпропущено...


я имел в виду немного другое наверное

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

RAISE EXCEPTION сделать.

Или вызывать в явной транзакции и по результатам делать commit или rollback.

--
Maxim Boguk
www.postgresql-consulting.ru

ясно, спасибо. еще:

если функция1 вызывает функцию2, а та - функцию3, значит ли это, что будут три вложенные
транзакции?
и что будет в случае, если функция3 завершится нормально (неявный коммит),
а вот функция2 сгенерирует RAISE EXCEPTION ?
...
Рейтинг: 0 / 0
Функции и транзакции
    #39287985
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Будет 1 транзакция, вне зависимости от вложения ф-ий — та, в рамках которой была вызвана самая первая ф-ия.

Завершение функции к коммиту (неважно какому) не приводит, т.к. функция выполняется в рамках транзакции запроса, который её вызвал. (Потому и функции, в отличии от О! процедур.)

Если функция кидает исключение и его никто не ловит, то запрос считается ошибочным и транзакция откатывается либо целиком, либо до точки (если она была).
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288065
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

поцгрес как и аракел не придерживается абсракции "вложенных транзакций"
вместо них используется эквивалентная концепция "сейвпойнтов"
которые могут быть как "явными" -- sql--savepoint так и неявными -- plpgslq: begin [savepoint here] ... exception when ... end;


факультативноэ: на любом сейвпойнте в пж наваривается счётчик транзакций (на т.н. сабтранзакциях).
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288075
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovРолг Хупин,

Будет 1 транзакция, вне зависимости от вложения ф-ий — та, в рамках которой была вызвана самая первая ф-ия.

Завершение функции к коммиту (неважно какому) не приводит, т.к. функция выполняется в рамках транзакции запроса, который её вызвал. (Потому и функции, в отличии от О! процедур.)

Если функция кидает исключение и его никто не ловит, то запрос считается ошибочным и транзакция откатывается либо целиком, либо до точки (если она была).

То есть, если я правильно понял:

я в приложении делаю запрос

Код: sql
1.
select fun1();



fun1() вызывает fun2(), которая вызывает fun3()

fun3 успевает что-то сделать, а fun2 генерирует исключение
(явно или нет, не важно),
результат - роллбэк всего запроса select fun1();
включая роллбэк действий, уже сделанных fun3()

так?
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288150
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь нашел небольшое обсуждение, интересны два последних примера, точнеее - второй
Что получается: есть явная транзакция, затем функция выолняется в своей неявной транзакции или же делает неявный
begin savepoint?


http://postgresql.ru.net/node/214388

Получается, что функция как бы транзакция в транзакции, и не очень-то это хорошо, хотя бы потому что это неочевидно!
Хотя что называется, почувствуйте разницу:
1. Берём вариант функции БЕЗ обработки исключения:
CREATE OR REPLACE FUNCTION "public"."fntrans" (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
INSERT INTO t2 (f1) VALUES (1);
INSERT INTO t2 (f1) VALUES (2);
INSERT INTO t2 (f1) VALUES (3);
raise exception 'Oooooppsss!';
INSERT INTO t2 (f1) VALUES (4);
RETURN 1;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
$tmp=# BEGIN;
BEGIN
tmp=# INSERT INTO t2 (f1) VALUES (5);
INSERT 0 1
tmp=# SELECT fntrans();
ERROR: Oooooppsss!
tmp=# COMMIT;
ROLLBACK
tmp=# select * from t2;
f1
----
(0 rows)
Т.е. после COMMIT, выполнился ROLLBACK и INSERT который был вызван внутри транзакции перед функцией не выполнился.

2. Берём вариант функции C обработкой исключения:
CREATE OR REPLACE FUNCTION "public"."fntrans" (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
INSERT INTO t2 (f1) VALUES (1);
INSERT INTO t2 (f1) VALUES (2);
INSERT INTO t2 (f1) VALUES (3);
raise exception 'Oooooppsss!';
INSERT INTO t2 (f1) VALUES (4);
RETURN 1;
EXCEPTION
WHEN OTHERS THEN RETURN 0;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
tmp=# BEGIN;
BEGIN
tmp=# INSERT INTO t2 (f1) VALUES (5);
INSERT 0 1
tmp=# SELECT fntrans();
fntrans
---------
0
(1 row)
tmp=# COMMIT;
COMMIT
tmp=# select * from t2;
f1
----
5
(1 row)
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288198
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинТ.е. после COMMIT, выполнился ROLLBACK и INSERT который был вызван внутри транзакции перед функцией не выполнился.
Неверное утверждение, тут COMMIT-а не было, вместо него произошел ROLLBACK.
Именно так стоит рассматривать этот ответ сервера.

Ролг Хупин2. Берём вариант функции C обработкой исключения:
CREATE OR REPLACE FUNCTION "public"."fntrans" (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
INSERT INTO t2 (f1) VALUES (1);
INSERT INTO t2 (f1) VALUES (2);
INSERT INTO t2 (f1) VALUES (3);
raise exception 'Oooooppsss!';
INSERT INTO t2 (f1) VALUES (4);
RETURN 1;
EXCEPTION
WHEN OTHERS THEN RETURN 0;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
tmp=# BEGIN;
BEGIN
tmp=# INSERT INTO t2 (f1) VALUES (5);
INSERT 0 1
tmp=# SELECT fntrans();
fntrans
---------
0
(1 row)
tmp=# COMMIT;
COMMIT
tmp=# select * from t2;
f1
----
5
(1 row)
Как и ожидалось.
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288199
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупиня в приложении делаю запрос

Код: sql
1.
select fun1();



fun1() вызывает fun2(), которая вызывает fun3()

fun3 успевает что-то сделать, а fun2 генерирует исключение
(явно или нет, не важно),
результат - роллбэк всего запроса select fun1();
включая роллбэк действий, уже сделанных fun3()

так?Да, именно так.
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288365
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Ролг Хупин]vyegorovРолг Хупин,



fun1() вызывает fun2(), которая вызывает fun3()

fun3 успевает что-то сделать, а fun2 генерирует исключение
(явно или нет, не важно),
результат - роллбэк всего запроса select fun1();
включая роллбэк действий, уже сделанных fun3()

так?

Да так.


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288405
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Maxim Boguk]Ролг Хупинпропущено...


Да так.


--
Maxim Boguk
www.postgresql-consulting.ru

ясно, дальше

Сделал три функции, 1->2->3

Комбинирую raise exception например так, в любом случае в таблице записей нет.
А можно ли во внутренней функции так поймать exception, чтобы вызвавшая её все-таки сработала?



Код: sql
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
create table t2(ID SERIAL PRIMARY KEY, f1 INTeger);

CREATE OR REPLACE FUNCTION "public"."fntrans" (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
raise notice 'fntrans';
  INSERT INTO t2 (f1) VALUES (1);
  INSERT INTO t2 (f1) VALUES (2);
  INSERT INTO t2 (f1) VALUES (3);

  select fntrans2();
--  raise exception 'Oooooppsss!';
  INSERT INTO t2 (f1) VALUES (4);
  RETURN 1;
EXCEPTION  
  WHEN OTHERS THEN 
  BEGIN 
  	raise notice 'fntrans exception';
	RETURN 0;
  END;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

CREATE OR REPLACE FUNCTION public.fntrans2 (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
  raise notice 'fntrans2';
  INSERT INTO t2 (f1) VALUES (10);
  INSERT INTO t2 (f1) VALUES (22);
  INSERT INTO t2 (f1) VALUES (30);
  select fntrans3();
  --raise exception 'Oooooppsss 2!';
  INSERT INTO t2 (f1) VALUES (40);
  RETURN 1;
EXCEPTION  
  WHEN OTHERS THEN RETURN 0;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

CREATE OR REPLACE FUNCTION public.fntrans3 (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
   raise notice 'fntrans3';
    
  INSERT INTO t2 (f1) VALUES (100);
  INSERT INTO t2 (f1) VALUES (200);
  INSERT INTO t2 (f1) VALUES (300);
  raise exception 'Oooooppsss 3!';
  INSERT INTO t2 (f1) VALUES (400);
  RETURN 1;
EXCEPTION  
  WHEN OTHERS THEN RETURN 0;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;


SELECT fntrans();

Select * from t2;

-- записей нет
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288433
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Код: sql
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.
CREATE OR REPLACE FUNCTION public.fntrans2 (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
  raise notice 'fntrans2';
  INSERT INTO t2 (f1) VALUES (10);
  INSERT INTO t2 (f1) VALUES (22);
  INSERT INTO t2 (f1) VALUES (30);

  BEGIN --savepoint? ,kzlm
      select fntrans3();
      raise exception 'Oooooppsss 2!';
       INSERT INTO t2 (f1) VALUES (40);
       RETURN 1;
  EXCEPTION  
  WHEN OTHERS THEN RETURN 0;
  END;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288458
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупин
Код: sql
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.
CREATE OR REPLACE FUNCTION public.fntrans2 (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
  raise notice 'fntrans2';
  INSERT INTO t2 (f1) VALUES (10);
  INSERT INTO t2 (f1) VALUES (22);
  INSERT INTO t2 (f1) VALUES (30);

  BEGIN --savepoint? ,kzlm
      select fntrans3();
      raise exception 'Oooooppsss 2!';
       INSERT INTO t2 (f1) VALUES (40);
       RETURN 1;
  EXCEPTION  
  WHEN OTHERS THEN RETURN 0;
  END;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;




изменил так, как написано, но после вызова 1->2->3

SELECT fntrans();

Select * from t2;

таблица пустая
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288462
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме всего вот аутпут, который показывает, что то исключение все-таки пробило на самый верх

NOTICE: fntrans
NOTICE: fntrans2
CONTEXT: SQL statement "select fntrans2()"
PL/pgSQL function fntrans() line 8 at SQL statement
NOTICE: fntrans3
CONTEXT: SQL statement "select fntrans3()"
PL/pgSQL function fntrans2() line 10 at SQL statement
SQL statement "select fntrans2()"
PL/pgSQL function fntrans() line 8 at SQL statement
NOTICE: fntrans exception
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288481
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

мальчик , ты дебил ?

разберись сначала с единственным сейвпойнтом

Код: sql
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.
28.
29.
30.
31.
create table t2(ID SERIAL PRIMARY KEY, f1 INTeger);

CREATE OR REPLACE FUNCTION public.fntrans2 (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
	raise notice 'fntrans2';
	INSERT INTO t2 (f1) VALUES (10);
	INSERT INTO t2 (f1) VALUES (22);
	INSERT INTO t2 (f1) VALUES (30);

	BEGIN --savepoint? ,kzlm

			raise exception 'Oooooppsss 2!';
			INSERT INTO t2 (f1) VALUES (40);
			RETURN 1;
	EXCEPTION	
	WHEN OTHERS THEN RETURN 0;
	END;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE;

SELECT public.fntrans2();
SELECT * FROM t2;
---------------------
1;10
2;22
3;30


потом нанизывай их одно на другое.
И если подавляешь чужое исключение -- выводи хотя бы его следы (SQLERRM SQLSTATE) в своих сообщениях -- могабыть оно вообще на что--то другое матерится.
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288488
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупин,

мальчик , ты дебил ?

разберись сначала с единственным сейвпойнтом

Код: sql
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.
28.
29.
30.
31.
create table t2(ID SERIAL PRIMARY KEY, f1 INTeger);

CREATE OR REPLACE FUNCTION public.fntrans2 (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
	raise notice 'fntrans2';
	INSERT INTO t2 (f1) VALUES (10);
	INSERT INTO t2 (f1) VALUES (22);
	INSERT INTO t2 (f1) VALUES (30);

	BEGIN --savepoint? ,kzlm

			raise exception 'Oooooppsss 2!';
			INSERT INTO t2 (f1) VALUES (40);
			RETURN 1;
	EXCEPTION	
	WHEN OTHERS THEN RETURN 0;
	END;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE;

[color=red]SELECT public.fntrans2();
SELECT * FROM t2;[/color]
---------------------
1;10
2;22
3;30


потом нанизывай их одно на другое.
И если подавляешь чужое исключение -- выводи хотя бы его следы (SQLERRM SQLSTATE) в своих сообщениях -- могабыть оно вообще на что--то другое матерится.

Я будуу обращаться к вам на вы, судя по всему у вас с нервной системой не все в порядке
И я не хотел бы давать вам оценку.

Разница есть в том примере. который я привел и в вашем?

SELECT fntrans();
Select * from t2;

Так вот я задал вопрос про три функции и привел их.
Вы дали совет как исправить, но вызов не тот, который в моем примере, а следовательно это не ответ на мой вопрос.
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288505
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинqwwqРолг Хупин,

мальчик , ты дебил ?

разберись сначала с единственным сейвпойнтом

Код: sql
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.
28.
29.
30.
31.
create table t2(ID SERIAL PRIMARY KEY, f1 INTeger);

CREATE OR REPLACE FUNCTION public.fntrans2 (
)
RETURNS integer AS
$body$
declare d double precision;
BEGIN
	raise notice 'fntrans2';
	INSERT INTO t2 (f1) VALUES (10);
	INSERT INTO t2 (f1) VALUES (22);
	INSERT INTO t2 (f1) VALUES (30);

	BEGIN --savepoint? ,kzlm

			raise exception 'Oooooppsss 2!';
			INSERT INTO t2 (f1) VALUES (40);
			RETURN 1;
	EXCEPTION	
	WHEN OTHERS THEN RETURN 0;
	END;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE;

[color=red]SELECT public.fntrans2();
SELECT * FROM t2;[/color]
---------------------
1;10
2;22
3;30


потом нанизывай их одно на другое.
И если подавляешь чужое исключение -- выводи хотя бы его следы (SQLERRM SQLSTATE) в своих сообщениях -- могабыть оно вообще на что--то другое матерится.

Я будуу обращаться к вам на вы, судя по всему у вас с нервной системой не все в порядке
И я не хотел бы давать вам оценку.

Разница есть в том примере. который я привел и в вашем?

SELECT fntrans();
Select * from t2;

Так вот я задал вопрос про три функции и привел их.
Вы дали совет как исправить, но вызов не тот, который в моем примере, а >>>следовательно<<< это не ответ на мой вопрос.

таки да, мальчик ещё и не читатель

ещё раз повторяю -- от простого -- к сложному
сначала -- поведение при одном сейвпойнте в цепочке
и только потом --- инжекция туда новых проблем
а широко шагать -- штаны порвёшь
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288512
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупинпропущено...


Я будуу обращаться к вам на вы, судя по всему у вас с нервной системой не все в порядке
И я не хотел бы давать вам оценку.

Разница есть в том примере. который я привел и в вашем?

SELECT fntrans();
Select * from t2;

Так вот я задал вопрос про три функции и привел их.
Вы дали совет как исправить, но вызов не тот, который в моем примере, а >>>следовательно<<< это не ответ на мой вопрос.

таки да, мальчик ещё и не читатель

ещё раз повторяю -- от простого -- к сложному
сначала -- поведение при одном сейвпойнте в цепочке
и только потом --- инжекция туда новых проблем
а широко шагать -- штаны порвёшь

У вас навязчивое желание называть юзеров "мальчег", это нетрадициионо.

Ладно, к вопросу:


Если бы я был в курсе я бы не задавал вопросы, хотелось бы разобраться.

"поведение при одном сейвпойнте в цепочке"

Да, при вызове fntrans2() exception ловится внутри функции при ее вызове.

Вопрос: почему этот exception пробивает в вызвавшую функцию при вызове
fntrans()->fntrans2()
?
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288513
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин

У вас навязчивое желание называть юзеров "мальчег", это нетрадициионо.
не юзеров, а дебилов. когда они ещё и мельтешат не думая.
Ролг Хупин
Ладно, к вопросу:


Если бы я был в курсе я бы не задавал вопросы, хотелось бы разобраться.

"поведение при одном сейвпойнте в цепочке"

Да, при вызове fntrans2() exception ловится внутри функции при ее вызове.

Вопрос: почему этот exception пробивает в вызвавшую функцию при вызове
fntrans()->fntrans2()
?

приведите весь текст своего кейса (заново, целиком, в спойлере) -- и будет ясно, что именно вы делаете, и, что из этого получается.

раз не хотите по шагам -- давайте весь ваш бред целиком

мну, например, совсем не очевидно, что "пробивает" именно этот, и именно там.
...
Рейтинг: 0 / 0
Функции и транзакции
    #39288515
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупин

У вас навязчивое желание называть юзеров "мальчег", это нетрадициионо.
не юзеров, а дебилов. когда они ещё и мельтешат не думая.
Ролг Хупин
Ладно, к вопросу:


Если бы я был в курсе я бы не задавал вопросы, хотелось бы разобраться.

"поведение при одном сейвпойнте в цепочке"

Да, при вызове fntrans2() exception ловится внутри функции при ее вызове.

Вопрос: почему этот exception пробивает в вызвавшую функцию при вызове
fntrans()->fntrans2()
?

приведите весь текст своего кейса (заново, целиком, в спойлере) -- и будет ясно, что именно вы делаете, и, что из этого получается.

Так я его и привел в вопросе
раз не хотите по шагам -- давайте весь ваш бред целиком

мну, например, совсем не очевидно, что "пробивает" именно этот, и именно там.

Зря вы так: " не юзеров, а дебилов. когда они ещё и мельтешат не думая. "
вы вряд ли дебил, вроде соображаете.
Хотя, одно другому не мешает, а иногда и совмещается ;-)

Спасибо вам, добрый юзер,
разобрался наконец-то, это был другой эксцепшын, родной для функции fntrans

из-за вызова в ней
select fntrans2(), типа дискард дата и пр., заменил на perform fntrans2() и всё сработало!


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


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