Hirdetés

Új hozzászólás Aktív témák

  • Magnat
    veterán

    Sziasztok!

    Egy PostgreSQL-es kérdésem lenne, amin már régóta agyalok, mi lenne a megfelelő megoldás.
    - Adott egy - nem túl bonyolult - függvény, ami egy táblából dolgozik a lekérdezéshez és nagyon gyakran, 0,5 másodpercenként meg van hívva, tehát nagyon fontos, hogy igen gyors legyen (ez meg is valósul, tényleg nagyon gyors).
    - Ennek a táblának a tartalma dinamikusan változik, 20 másodpercenként frissül és alapvetően elég kevés rekordot tartalmaz pont azért, hogy gyors legyen.
    - A kérdés az, hogy milyen megoldással frissüljön ennek a táblának a tartalma úgy, hogy ne akadályozza a függvény futását, amely ezt a táblát használja.
    - 1. megoldás: a frissítés abból áll, hogy először TRUNCATE-elem a táblát
    TRUNCATE TABLE tábla;
    majd INSERT-álom a sorokat:
    INSERT INTO tábla SELECT *  FROM másik_tábla WHERE feltétel;
    - 2. megoldás: DELETE FROM tábla;
    majd INSERT-álom a sorokat:
    INSERT INTO tábla SELECT *  FROM másik_tábla WHERE feltétel;

    Ezt a két lépést úgy akarom megoldani, hogy egy blokkban fusson le, tehát egy függvénybe teszem bele.

    Fontos kérdés, hogy mi van, ha éppen akkor hívódik meg a függvényem, ami a táblát használja, amikor éppen a frissítő függvény (truncate/delete, majd insert) fut?
    Előállhat olyan helyzet, hogy épp üres táblát használ a függvényem?

    Szia,

    nem ismerem a PostgreSQL-t, de igent tippelnék, sőt, mivel az insert elvileg row exclusive lockol (tehát nem a teljes táblát) az is lehet, h a rekordok fele már be lesz szúrva amikor a fv lefut, a többi meg még nem ...

    BEGIN;
    TRUNCATE TABLE tábla;
    LOCK TABLE tábla IN EXCLUSIVE MODE;
    INSERT INTO tábla SELECT * FROM másik_tábla WHERE feltétel;
    COMMIT;

    Én vhogy így csinálnám, nyilván ha a fv éppen akkor fut rá amikor ez történik, akkor egy picit várni fog. (Már ha fontos, h üres táblára vagy az insert közepén ne fusson le)

    Illetve a truncate elvileg gyorsabb mint a delete, szóval amiatt is így használnám.

Új hozzászólás Aktív témák