powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
11 сообщений из 11, страница 1 из 1
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588782
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

FB 3.0 RN, page 64From Firebird 3, engine uses the Undo log to check whether a row was already inserted or modified by the current cursor .
Important
This stabilisation does NOT work with SUSPEND loops in PSQL.

Если я правильно понимать по-русски, то объявление в PSQL-коде курсора и обновление записей, по которым он пробегает, должно иметь такой же эффект, как и SQL-команда, обновляющая эти записи. При условии отсутствия SUSPEND'a.

Тогда как объяснить следующее ?

DDL:
Код: sql
1.
2.
3.
4.
5.
6.
recreate table t(id int primary key, f01 int);
commit;
insert into t values(1, 100);
insert into t values(2, 200);
insert into t values(3, 300);
commit;



Test-1:
Код: sql
1.
2.
update t set f01=(select sum(f01) from t); 
select * from t;

Result:
IDF01160026003600-- OK, всё пучком.

Test-2:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
set term ^;
execute block as
declare v_id int;
declare cur cursor for (select t.id from t);
begin
  open cur;
  while (1=1) do
  begin
    fetch cur into v_id;
    if (row_count = 0) then leave;
    update t set f01 = (select sum(f01) from t) where current of cur;
  end
  close cur;
end^
set term ;^
select * from t;

Result:IDF0116002110032000
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588809
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

твоя понимать неверно. Там имеется ввиду текущий курсор текущей SQL-команды.
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588814
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТам имеется ввиду текущий курсор текущей SQL-команды.а тогда зачем там вообще про P SQL говорится, да еще про suspend грозным голосом ?
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588823
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А statement видит изменения других транзакций, закоммиченых в процессе его работы?
Т.е. если я в одной транзакции запущу
Код: sql
1.
2.
3.
4.
5.
execute block returns (amount integer)
begin
  for select amount from salary where not payed into amount do
    suspend;
end;


а в параллельной транзакции сделаю
Код: sql
1.
update salary set payed = true where not payed


и закоммичу вторую, пока первая выдаёт данные.
Первая транзакция ведь дочитает всё до конца?

И ещё вопрос - как себя поведёт сервер, если это запустить не в разных транзакциях, а в одной, но так же в разных стейтментах?

И что будет если то же самое запустить в одном стейтменте? Т.е:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
execute block returns (amount integer)
begin
  for select amount from salary where not payed into amount do
  begin
    suspend;
    if (trunc(rand() * 10) = 1) then
      update salary set payed = true where not payed;
  end;
end;


Т.е. вопрос фактически в том, всегда ли statement является snapshot-ом? Или он иногда в процессе работы может "вдруг" увидеть изменения других стэйтментов (или не дай бог других транзакций)?
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588830
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты бы хоть прикреплённую тему прочитал что ли... Я уж не говорю об ibase.ru.

NickDee(или не дай бог других транзакций
А чего ему их не видеть если ему сказано читать (read) закоммиченное (committed)?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588831
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

это зависит от уровня изоляции транзакции
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588842
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидзачем там вообще про P SQL говорится, да еще про suspendА где ты видел suspend без psql ?
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588846
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDee(или не дай бог других транзакций
А чего ему их не видеть если ему сказано читать (read) закоммиченное (committed)?..

ЭЭЭ.
У меня в таблице 1G записей, и я в одной транзакции делаю delete from T (но не коммичу),
а во второй делаю select count(*) from T и, пока она делает выборку, я коммичу первую транзакцию.
Хочешь сказать что при read-commited этот запрос вернёт мне количество записей отличное от 1G, отфонарное? :)
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588848
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТаблоидзачем там вообще про P SQL говорится, да еще про suspendА где ты видел suspend без psql ?Дык нигде не видел, ес-сно.
Но при чтении: "This stabilisation does NOT work with SUSPEND loops in PSQL" - возникла галлюцинация, что когда ЕСТЬ psql-код (с курсором, как в показанном примере), но в нём НЕТ suspend'a, то всё должно также работать, как и в случае чистого SQL.
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588849
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeУ меня в таблице 1G записей, и я в одной транзакции делаю delete from T (но не коммичу),
а во второй делаю select count(*) from T и, пока она делает выборку, я коммичу первую транзакцию.
Хочешь сказать что при read-commited этот запрос вернёт мне количество записей отличное от 1G, отфонарное? :)Эксперимент, выполненный самостоятельно , очень часто даёт исчерпывающий ответ.
...
Рейтинг: 0 / 0
cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
    #38588863
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЭксперимент, выполненный самостоятельно, очень часто даёт исчерпывающий
ответ.
А мозг, использованный самостоятельно, может даже подсказать почему умолчательный уровень
изоляции в Firebird - concurency и почему чайники, меняющие его на что-либо другое от
балды - ССЗБ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / cursor stability: распростр ли это на where current of <cur>, если в PSQL нет suspend'a ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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