(toiminnot)

hwechtla-tl: Nettipäiväkirja 02.04.2026

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


Nyt on pitkästä aikaa the daily Java WTF:n aika!

Sattumalta tarvitsin softaan uuden version PostgreSQL-tietokannasta, ja sen myötä piti päivittää Flyway-kirjasto. Flyway, niin yksinkertaista ja hyödyllistä asiaa kuin tekeekin (automatisoi tietokantamigraatioita eli huolehtii että tietokannan skeema on sellainen kuin sovellus olettaa), on erittäin hyvä esimerkki javamaisesta kirjastosta -- mistäpä ei pystyisi tekemään monimutkaista! Osoittautui, että uusi Flyway ei pysty ajamaan migraatioita, joissa sanotaan "CREATE INDEX CONCURRENTLY ...".

Miksi? Koska Flyway migraatioita ajaessaan (jostain varmasti tosi hyvästä syystä) jättää auki yhden transaktion, joka tekee kyselyn:

SELECT COUNT(*) FROM pg_namespace WHERE nspname=$1
Koska indeksien rakentaminen vaatii tyypillisesti ettei mikään transaktio käsittele samalla mitään taulua samasta skeemasta, tämä yksi transaktio estää kaikki indeksien rakentamiset migraatioissa.

Kun tämä oli raportoitu Flywayn kehittäjille, päättivätkö he korjata kirjaston sellaiseksi että se sulkee tuon yhden (varmasti turhan) transaktion? Ei tietenkään! He suosittavat että migraatiot lakkaavat käyttämästä transaktiokohtaisia lukituksia.


kommentoi (viimeksi muutettu 02.04.2026 02:19)