Jak rozwiazac blad pqxx::usage_error

Jak rozwiazac blad pqxx::usage_error
masterO
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
  • Postów:1025
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ś:

Kopiuj
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 ?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:9 miesięcy
  • Postów:6610
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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

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

masterO
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
  • Postów:1025
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 ?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:9 miesięcy
  • Postów:6610
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ń


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
masterO
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
  • Postów:1025
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.