powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос про for no key update
2 сообщений из 2, страница 1 из 1
Вопрос про for no key update
    #39395984
AlexBabakaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть 2 таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table account
(
	id integer,
	balance numeric,
	constraint pk_account primary key (id)
);

create table transaction
(
	id serial, 
	idaccount int, 
	amount numeric, 
	constraint pk_transaction primary key (id),
	constraint fk_transaction_idaccount foreign key (idaccount) references account (id)
);

insert into account( id, balance)
select 1, 10;



Запрос:
Код: 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.
28.
29.
30.
31.
begin transaction;
do
$$
declare 
	l_Balance int;
	l_IDAccount int;
	l_Amount int;
begin

l_IDAccount := 1;
l_Amount := 5;

insert into transaction( idaccount, amount)
select l_IDAccount, l_Amount;

select balance
into l_Balance
from account
where id = l_IDAccount
for no key update;

raise notice '%', l_Balance;

update account
set Balance = Balance + l_Amount
where ID = l_IDAccount;

end
$$

commit;



Запускаю запрос в двух окнах pgAdmin, коммит не делаю. В первом окне получаю "ЗАМЕЧАНИЕ: 10". Второй запрос висит и ждет. В первом окне выполняю коммит. Второй запрос возвращает "ЗАМЕЧАНИЕ: <NULL>", хотя я ожидаю получить "ЗАМЕЧАНИЕ: 15".

Проблема исчезает, если заменить for no key update на for update, либо если удалить внешний ключ fk_transaction_idaccount. Хотелось бы понять, что не так с for no key update?
...
Рейтинг: 0 / 0
Вопрос про for no key update
    #39395993
AlexBabakaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал на двух версиях - 9.4.10 и 9.5.5
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос про for no key update
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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