Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Michael Samanov                      2:550/5068.1515 26 Aug 2000  10:15:59
 To : Juriy Goloveshkin
 Subject : Re: DBI+здоровые таблицы
 -------------------------------------------------------------------------------- 
 
 Hello, Juriy!
 
 At Fri, 25 Aug 00 17:38:29 +0400 Juriy Goloveshkin wrote:
 
  JG>>>  $dbh->do('declare test cursor for select * from addresses');
  JG>>>  while (my @test=$dbh->selectrow_array('fetch test')){
 
  MS>> А точно надо на каждый цикл курсор создавать?
 JG> что значит "на каждый цикл"? не понял я. все зависит от логики программы.
 
 это
 
 JG> был пример работы с курсором.
 
 Hа каждый цикл while(...selectrow_array). Все, вопрос снят. В постгрессе
 курсор объявляется DECLARE и сразу становится доступен для FETCH, т.е.
 работает в контексте транзакции, а в интербейсе, наоборот, он
 объявляется DECLARE, становится, таким образом, частью метаданных базы,
 а открывается по OPEN.
 
  MS>> Это не метаданные ли ты так изменяешь?
 JG> чего делаю? ;)
 
 Метаданные - это структура базы, записанная в служебных таблицах.
 Типа имена таблиц, индексы, триггеры, связи и т.д.
 
  MS>> А работает оно внутри одной транзакции или глобально?
 JG> оно это кто? курсоры работают внутри транзакции(для этого и AutoCommit
 JG> сбрасывается).
 
 Оно - я имел в виду курсоры. Как видишь, выше я привел разницу в реализации
 курсоров в разных СУБД.
 
  MS>> Это я к тому, что не имеется ли тут подводных камней?
 JG> мне нужно было читать большие таблицы. Я это получил. какие подводные
 
 камни?
 
 А камни - они завсегда присутствуют :-)
 
 JG> могу только сказать, что чтобы не переполнять лог транзакций, пользительно
 JG> фетчить через одно соединение, а какие-либо другие работы с базами
 
 проводить
 
 JG> через другое. мне так видится...
 
 И неправильно видится. Hе закрывать транзакции - вообще дурной тон.
 Тем более, что лог транзакций - один на все соединения.  Если уж
 у тебя отключен $dbh->{AutoCommit}, то делать commit или rollback
 ты обязан хоть укакайся. Рекомендуется это делать через eval таким
 примерно образом:
 
 {
   local $dbh->{AutoCommit} = 0;
   local $dbh->{RaiseError} = 0;
   eval {
     /* ряд операций, которые должны быть в одной транзакции */
     ...
   }
   $@ ? $dbh->rollback : $dbh->commit;
 }
 
 Hе делать этого - примерно то же, что на C писать malloc без free.
 
 Hе знаю, как DBD::Pg смотрит на local $dbh->{AutoCommit}, а вот
 новый DBD::InterBase очень даже кушает эту конструкцию, в то время,
 как старый вариант ругался как-то наподобие "unable to set local
 
 $dbh->{AutoCommit}".
 
 Так что я теперь делаю AutoCommit=1, чтоб не делать commit на каждый
 чох, а в отдельных случаях его отключаю и работаю как показано
 выше.
 
 Sincerely yours, Michael (mailto:mike@vlink.ru).
 --- ifmail v.2.14
  * Origin: Home (2:550/5068.1515@fidonet)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 DBI+здоровые таблицы   Juriy Goloveshkin   24 Aug 2000 14:29:56 
 Re: DBI+здоровые таблицы   Michael Samanov   24 Aug 2000 17:35:15 
 Re: DBI+здоровые таблицы   Artem Chuprina   25 Aug 2000 10:50:37 
 DBI+здоровые таблицы   Juriy Goloveshkin   25 Aug 2000 16:15:39 
 Re: DBI+здоровые таблицы   Michael Samanov   25 Aug 2000 17:26:57 
 DBI+здоровые таблицы   Juriy Goloveshkin   25 Aug 2000 19:38:29 
 Re: DBI+здоровые таблицы   Serge Shikov   26 Aug 2000 11:32:43 
 Re: DBI+здоровые таблицы   Michael Samanov   26 Aug 2000 10:15:59 
 DBI+здоровые таблицы   Juriy Goloveshkin   26 Aug 2000 15:30:35 
 Re: DBI+здоровые таблицы   Michael Samanov   27 Aug 2000 09:58:39 
 DBI+здоровые таблицы   Juriy Goloveshkin   27 Aug 2000 14:50:38 
 Re: DBI+здоровые таблицы   Michael Samanov   27 Aug 2000 15:37:36 
 DBI+здоровые таблицы   Juriy Goloveshkin   28 Aug 2000 11:59:13 
 Re: DBI+здоровые таблицы   Michael Samanov   28 Aug 2000 15:10:40 
 DBI+здоровые таблицы   Juriy Goloveshkin   28 Aug 2000 20:19:34 
 Re: DBI+здоровые таблицы   Michael Samanov   28 Aug 2000 21:55:33 
Архивное /ru.perl/7949a0bd9a1a.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional