• 0
Sign in to follow this  
Followers 0
Wuu

PostgreSQL lock

Question

PostgreSQL 9.4

Ir updeits, kurš ir ļoti svarīgs. Servera puse ir uzrakstīta, tā ka skeilojas horizontāli. Problēmu nesen atklāju, ka brīžiem, vairāki serveri cenšas updeitot vienu ierakstu, kurš ir ļoti strikti aprakstīts. Gandrīz nereāli, bet toties saskrienas.

Pirms paša updeita ir 3 pārbaudes, un pašā updeitā ir pārbaude, vai tiešām var veikt updeitu. Tik un tā saskrienas. Kā panākt, un aizlokot vienu rindu tabulā. Lai citas transakcijas gaida? Lūgums ar koda piemēru. No https://www.postgresql.org/docs/9.1/static/explicit-locking.html  šī es neko nesaprotu, vai tiešām ir grūti ielikt pāris piemērus? PG manuālus ir vienkārši drausmīgs. 

Edited by Wuu

Share this post


Link to post
Share on other sites

4 answers to this question

  • 0
select * from users where id = 5395 for update;
update users set email = 'cooolmail@mailinator.com' where id = 5395;

Šādi? Kā lai notestē, ka tiešām strādā?

Share this post


Link to post
Share on other sites
  • 0

https://www.postgresql.org/docs/9.1/static/sql-begin.html

begin;
select * from users where id = 5395 for update;
update users set email = 'cooolmail@mailinator.com' where id = 5395;
commit;

Ja pareizi saprotu begin; commit; visu saliek vienā transakcijā, un ja nebūs nostrādājis commit's ieraksts ID = 5395 nebūs pieejams citām darbībām un tās gaidīs kamēr ieraksts būs atkal pieejams.

Share this post


Link to post
Share on other sites
  • -1

http://stackoverflow.com/a/18882404/540394

Eku vēl noderīga info.

> Kā lai notestē, ka tiešām strādā?

Vells viņ zin. Varbūt kaut kā var mēģināt, vienlaicīgi palaižot 2 skriptus, kuri abi piekļūst tabulai un izpilda FOR UPDATE, varbūt ir labāks variants.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0