Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> izolacja tranzakcji i sekwencja
cepa
post
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
?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
cojack
post
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
pogdan
post
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);




Go to the top of the page
+Quote Post
viking
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:05