izolacja tranzakcji i sekwencja |
izolacja tranzakcji i sekwencja |
29.06.2011, 22:28:03
Post
#1
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 7 Dołączył: 27.01.2010 Ostrzeżenie: (0%) |
Joł
mam pytanie bo nie jestem pewien na 100%, przykladowo: - rozpoczynam tranzakcje - robie jakis tam insert - pobieram ostatni id rekordu w tej tabeli (select * from curval('seq_id')) - commit czy tranzakcja zapewnia ze zwrocony id bedzie na 100% indeksem rekordu ktory wstawilem? czy powiniuennem dodac locka na poczatku tranzakcji: LOCK TABLE tabela IN SHARE ROW EXCLUSIVE MODE ? -------------------- |
|
|
1.07.2011, 08:34:49
Post
#2
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) |
Nie musisz blokować tabeli, bo postgresql nie wykona dwóch operacji na raz na tej samej tabeli, wszystko leci w kolejkę.
Wystarczy że zrobisz select curval('seq_id'); o ile dobrze pamiętam. Na 100% to kiedyś wszyscy umrzemy. -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
15.07.2011, 08:40:22
Post
#3
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 21.10.2007 Ostrzeżenie: (0%) |
z transakcji
begin insert into a (a ) values (1); select currval(a_id); commit; i select zwróci "id" ostanio wstawiany record gdzie id tabeli a to pole pobierające wartość z seqwencji "a_id" i to jest prawdą. Na tomiast tutaj bez transakcji już tak być nie musi? Czy mam rację ? insert into a (a ) values (1); select currval(a_id); |
|
|
11.11.2011, 08:10:39
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Możesz od razu zwrócić w INSERT. Zobacz w dokumentacji RETURNING
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 20.04.2024 - 02:12 |