Jak rozwiazac blad pqxx::usage_error

0

Uruchomiłem sobie program w c++ z uzyciem biblioteki pqxx, która to służy do obsługi bazy danych. Program testowo wysyła co jakiś czas (losowy czas) dane do bazy. Program tez ma uruchomiony watek ktory rowniez zapisuje dane do bazy w losowym czasie. Postanowiłem wyłapać błąd i mam takie coś:

terminate called after throwing an instance of 'pqxx::usage_error'
  what():  Started transaction<READ COMMITTED> while transaction<READ COMMITTED> still active

Z tego co zrozumiałem to że jest rozpoczęta transakcja i program chce rozpocząć jeszcze kolejną przed zamknieciem tej wczesniejszej. Jak roziwązać ten problem ?

0

pewnie wpadłeś na genialny plan aby wątek główny i poboczny używały tego samego połączenia. A tak się niestety nie da - osobny wątek - osobne połączenie

0

Nie, żeby jakoś specjalnie ukrywali dokumentację, no, ale niech ci będzie:
http://pqxx.org/development/libpqxx/wiki/Threading

0

Dzieki za odpowiedzi.
Zrobiłem wczesniej własnie tak ze miałem program glowny i watek i w glownym było połączenie do bazy a wątek tez uzywal tego samego polaczenia. W opisie w metodzie 1 piszą ze mozna zrobic watek do samej bazy danych i wszystko puszczac przez niego. ale to co ma byc zmienna globalna trzymajaca identyfikator polaczenia i reszta watkow ma z tego korzystac? to przeciez tez moze sie znowu stac tak ze jakies dwa watki beda jednoczesnie chcialy wykonac tranakcje ? czy zle mysle ?

0

czy napisałem niewyraźnie - osobny wątek - osobne połączenie i będzie działać na 100%. Inaczej możesz się bawić w blokowanie dostępu do połączenia podczas trwania operacji na bazie ale to się mija z ideą wykonywania jednocześnie kilku zapytań

0

Zrobilem tak wlasnie ze jedne watek jedno polaczenie to faktycznie najbezpieczniejsze i bez kombinowania

1 użytkowników online, w tym zalogowanych: 0, gości: 1