sql >> Databáze >  >> RDS >> PostgreSQL

Spring Data JPA + Hibernate Přeskočení zamčených řádků (PostgreSQL)

Váš kód je v pořádku. Vše, co si musíte zapamatovat, je, že PESSIMISTIC_WRITE používá SELECT …​ FOR UPDATE SKIP LOCKED v Oracle a PostgreSQL 9.5 . Předpokládám, že jste mohli zapomenout říct JPA, že máte používat novější verzi Postgresu. Takže máte dvě možnosti:

  • řekněte JPA, že používáte PostgreSQL Dialect, který podporuje SKIP LOCKED :
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
    
    Poté jsem obdržel požadovaný výstup:
    where
        subscripti0_.valid_until<=? 
    and subscripti0_.status='ACTIVE' 
    for update of subscripti0_1_ skip locked
    
    a samozřejmě, souběžné vlákno nebylo schopno načíst zamčené řádky, dokud nebyla transakce dokončena.
  • použijte nativní dotaz :
    SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED 
    


  1. SQLcl pro přenos dat z Oracle do PostgreSQL nebo YugabyteDB 🅾🐘🚀

  2. Volitelný argument ve funkci PL/pgSQL

  3. Jak zavolat hashovací funkci Oracle MD5?

  4. Jak najít formát data používaný v aktuální relaci v SQL Server (T-SQL)