![]() |
![]() |
![]()
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 ? |
|
|
![]() |
![]()
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. |
|
|
![]()
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); |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Możesz od razu zwrócić w INSERT. Zobacz w dokumentacji RETURNING
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 13:05 |