» »

[MariaDB] Error pri nastavitvi "SET TRANSACTION ISOLATION LEVEL"

[MariaDB] Error pri nastavitvi "SET TRANSACTION ISOLATION LEVEL"

HotBurek ::

Dobro jutro.

Evo fantje in dekline, nov dan, nov izziv.

Database server je MariaDB.

Naredil sem sledečo proceduro:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test`()
    SQL SECURITY INVOKER
BEGIN
	
	# set transaction isolation level
	SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;	

	# start transaction
	START TRANSACTION READ WRITE;

	# commit transaction
	COMMIT;

END

Potem grem v termianl, se povežem na server in poženem sledeč ukaz:

CALL `sp_test`();

In dobim error:

ERROR 1568 (25001): Transaction characteristics can't be changed while a transaction is in progress

Spet ena zagonetka...
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

HotBurek ::

Evo, sem malo testiral, in mislim da sem našel, v čem je bil problem.

Program DBeaver že sam po sebi štarta transakcije.

Dokumentacija je tule: https://dbeaver.com/docs/dbeaver/Auto-a...

Če se to (transaction) izklopi, pa dela testna procedure. Ena druga, ki je večja, pa ne. To še ne vem, zakaj je tako.

Glavno pa je, da gre za "DBeaver" problem, drugje pa dela. Tudi v terminalu, a ne vem, zakaj prej ni delalo.

Kind of okey-ish done.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

DamijanD ::

No prej si napisal terminal, ne DBeaver.
Anyway to da v SP spreminjaš isolation level je bolj slaba praksa (oz. po novem Well that is not how it is done :D) Ker nikoli ne veš iz katerega konteksta se bo SP klicala. Isolation level se nastavi, ko odpreš povezavo oz, ko štartaš prvo (zunanjo) transakcijo.

HotBurek ::

Proceduro kličem iz dveh različnih procesov (Python skripta).

Vse kar bi rad, da ko procedura inserta podatke (insert (a, b, c) select a, b, c;) da me ne moti, če pride do nekonsistence. Itak se kasneje popravi, ko ena izmed procedur dela refresh.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

HotBurek ::

Včeraj in danes sme še naprej raziskoval.

Odkril sem, da po defaultu sql_engine (od SqlAlchemy) "hrani" connection v pool-u, tudi če ga zapremo (close).

Tako je program v prvem loop-u uspešno pognal proceduro (v kateri se nastavi TRANSACTION ISOLATION LEVEL), v vsakem naslednjem loop-u pa ne.

Zadevo sem rešil takole:

import sqlalchemy.pool;

sql_engine = sqlalchemy.create_engine(sqlhost, future=True, poolclass=sqlalchemy.pool.NullPool);

Dokumentacija: https://docs.sqlalchemy.org/en/20/core/...

Well done.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

DamijanD ::

pool je z razlogom tam ...

Ales ::

Ugasneš pool in si rečeš "well done". :))

Well done @HotBurek! Very well done - če bi bil zrezek bi se temu reklo "zoglenel".

Zgodovina sprememb…

  • spremenil: Ales ()

pegasus ::

HotBurek, bo to nova mimovrste štacuna?

(Ko sem 2007 prišel na Domenco, sem med drugim takratnega developerja mimovrste vprašal, kakšne in kako uporablja transakcije. Debelo me je pogledal in vprašal "kaj so to transkacije". Mu razložim ... me gleda in izjavi "mi tega ne rabimo")

HotBurek ::

V štartu je bilo mišljeno kot dropšiping. Da bi kupec kupil izdelek (ali več njih), jaz pa bi tak ticket (in s tem obveznosti kot so dostava, tracking, return policija, customer care itn.) "preprodal" naprej za vrednost nakupa + 1 cent provizije za vsak izdelek.

Zdej ta front-end del bi mi bilo zanimivo naredit, problem je potem vse ostalo: komu to preprodat naprej, kako sklent ugodoen dogovor v štartu ko si no-name, postavit firmo (doo, papirji), ... Mogoče bom tak sistem kdaj kasneje tudi postavil, ali pa na obstoječem dodal možnost.

Trenutno pa delam iskalnik produktov. Again. Brez spremljanja zgodovine cen (ker me to ne zanima, in tega zaenkrat ni). Pa iskanje po državah, glede na to, kje ima spletna stran "sedež". In, iskanje v širino.

Trenutno filam podatke v bazo, in je kr zamudno...
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Try/Except/Finally] - Kako pravilno zapreti povezavo na SQL bazo v Python-u?

Oddelek: Programiranje
17820 (224) jan_g
»

[MariaDB] Kako napisat SQL za top N by group?

Oddelek: Programiranje
11487 (298) kljuka13
»

Mariadb (InnoDB) istočasni insert v tabelo iz različnih procesov (strani: 1 2 )

Oddelek: Programiranje
876455 (2813) 2g00d4u
»

[SQL] primary key inkrementalno dodajanje (strani: 1 2 )

Oddelek: Programiranje
514771 (3961) ejresnevem

Več podobnih tem