Wuu Posted April 6, 2017 Report Share Posted April 6, 2017 (edited) 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 April 6, 2017 by Wuu Quote Link to comment Share on other sites More sharing options...
jurchiks Posted April 6, 2017 Report Share Posted April 6, 2017 Pirmkārt, tu skaties vecā lapā: https://www.postgresql.org/docs/9.4/static/explicit-locking.html Tevi interesē 13.3.2., SELECT FOR UPDATE ... Quote Link to comment Share on other sites More sharing options...
Wuu Posted April 7, 2017 Author Report Share Posted April 7, 2017 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ā? Quote Link to comment Share on other sites More sharing options...
jurchiks Posted April 8, 2017 Report Share Posted April 8, 2017 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. Quote Link to comment Share on other sites More sharing options...
Sasa Posted April 10, 2017 Report Share Posted April 10, 2017 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.