Portál AbcLinuxu, 8. května 2025 05:03
Nicméně ten SELECT nebyl spuštěný v transakciByl. V PostgreSQL (a v každém jiném rozumném systému s podporou transakcí) dotaz mimo transakci nespustíte.
Nebo to postgresql bere tak, že každý dotaz je vlastně transakce?Transakce se zahájí automaticky. Pravděpodobně máte v PDO nastavený autocommit, takže se pak každý příkaz provádí v samostatné transakci.
... Pravděpodobně máte v PDO nastavený autocommit, takže se pak každý příkaz provádí v samostatné transakci.Autocommit přece s PDO nesouvisí. Není to vlastnost databázového klienta, ale serveru.
BEGIN
, funguje to jako autocommit.
repeatable read
. Pokud použijete read committed
(v PostgreSQL je výchozí) nebo read uncommited
(v jiné databázi, PostgreSQL to neumí), a spustíte v jedné transakci dvakrát za sebou stejný select, může dát pokaždé jiné výsledky, pokud podkladovou tabulku mezi tím změnila jiná transakce. Když použijete repeatable read
, vidíte tabulky ve stavu, v jakém byly na začátku transakce (plus samozřejmě změny provedené aktuální transakcí).
Je to presne stejny, jako kdyz v databazi napises kursor. Pokud ti celej pobezi v jedny transakci, tak si tim muzes zajistit, ze se mezi tim data nezmeni - a samo tim taky zaridis peknou varku deadlocku.
Pokud to bude read only, není důvod, aby kvůli tomu něco deadlockovalo.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.