Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: izolacja tranzakcji i sekwencja
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
cepa
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
?
cojack
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.
pogdan
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);




viking
Możesz od razu zwrócić w INSERT. Zobacz w dokumentacji RETURNING
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.