PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Kiedy wybierz, aby zaktualizować, zablokować i odblokować?

Blokady są brane podczas (zwykle na początku lub w pobliżu początku) wykonania polecenia. Blokady (z wyjątkiem blokad doradczych) są zwalniane tylko gdy transakcja zostanie zatwierdzona lub wycofana. Nie ma FOR UNLOCK , nie ma też UNLOCK polecenie do odwrócenia skutków działania LOCK na poziomie tabeli Komenda. Wszystko to wyjaśniono w sekcji dotyczącej kontroli współbieżności w dokumentacji PostgreSQL.

Aby zwolnić blokady, musisz zatwierdzić lub wycofać transakcję.

Ponadto nie ma sensu pytać „czy ten wiersz został już usunięty przez inną równoczesną transakcję”. Nie jest on tak naprawdę usuwany, dopóki transakcja, która usunęła wiersze, nie zatwierdzi… a nawet wtedy może usunąć i ponownie wstawić wiersz lub inna równoczesna transakcja może wstawić wiersz ponownie.

Czy przypadkiem budujesz kolejkę zadań lub system kolejek wiadomości, bo jeśli tak, to problem został rozwiązany i nie powinieneś próbować wymyślać na nowo tego niezwykle skomplikowanego koła. Zobacz PGQ, ActiveMQ, RabbitMQ, ZeroMQ, itp. (Przyszłe wersje PostgreSQL mogą zawierać FOR UPDATE SKIP LOCKED ponieważ jest to testowane, ale nie zostało wydane w momencie pisania tego tekstu).

Sugeruję, abyś zamieścił nowe pytanie z bardziej szczegółowym opisem podstawowego problemu, który próbujesz rozwiązać. Zakładasz, że rozwiązaniem Twojego problemu jest „sprawdź, czy wiersz został już usunięty” lub „odblokuj wiersz”. To prawdopodobnie nie jest właściwie rozwiązanie. To trochę tak, jak ktoś, kto mówi „gdzie kupię benzynę”, kiedy ich pchacz nie jedzie, więc zakłada, że ​​nie ma w nim paliwa. Paliwo nie jest problemem, problem polega na tym, że rowery typu pchacz nie pobierają paliwa i trzeba je pedałować.

Wyjaśnij tło. Wyjaśnij, co chcesz osiągnąć. Przede wszystkim nie publikuj pseudokodu, publikuj rzeczywisty kod, z którym masz problemy , najlepiej w samodzielnej i możliwej do uruchomienia formie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zdobądź drzewo rodziców + dzieci z pg-obietnicą

  2. Jak uzyskać aktualny czas (bez strefy czasowej) w PostgreSQL

  3. Jak dodać automatycznie zwiększający się klucz podstawowy do istniejącej tabeli w PostgreSQL?

  4. Zapytanie rekurencyjne używane do zamykania przechodniego

  5. Importowanie .csv z kolumną datownika (dd.mm.rrrr gg.mm.ss) przy użyciu psql \copy