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

Spring Data JPA + Hibernate Skip Zablokowane wiersze (PostgreSQL)

Twój kod jest w porządku. Wszystko, co musisz pamiętać, to to, że PESSIMISTIC_WRITE używa SELECT …​ FOR UPDATE SKIP LOCKED w Oracle i PostgreSQL 9.5 . Zakładam, że mogłeś zapomnieć o poinformowaniu JPA, że masz korzystać z nowszej wersji Postgresa. Masz więc dwie opcje:

  • powiedz JPA, że używasz dialektu PostgreSQL, który obsługuje SKIP LOCKED :
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
    
    Po tym otrzymałem żądany wynik:
    where
        subscripti0_.valid_until<=? 
    and subscripti0_.status='ACTIVE' 
    for update of subscripti0_1_ skip locked
    
    i oczywiście współbieżny wątek nie był w stanie pobrać zablokowanych wierszy, dopóki transakcja nie została zakończona.
  • użyj natywnego zapytania :
    SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED 
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PgBouncer 1.7 – „Kolory różnią się po zmartwychwstaniu”

  2. Jakieś wady używania tekstu typu danych do przechowywania ciągów?

  3. Konfigurowanie klucza obcego z innym typem danych

  4. Czy specyfikacja JDBC zapobiega '?' przed użyciem jako operator (poza cudzysłowami)?

  5. Jaki typ znacznika czasu wybrać w bazie danych PostgreSQL?