Как я могу получить postgres sqlerrorcode с libpqxx? - PullRequest
0 голосов
/ 21 мая 2019

Я хотел бы узнать, как получить код ошибки Postgres SQL после вставки и т.д ..?

1 Ответ

0 голосов
/ 06 июля 2019

Вот фрагмент кода прямо из документации:

try
{
  // ...
}
catch (const pqxx::pqxx_exception &e)
{
  std::cerr << e.base().what() << std::endl;
  const pqxx::sql_error *s=dynamic_cast<const pqxx::sql_error*>(&e.base());
  if (s) std::cerr << "Query was: " << s->query() << std::endl;
}

Как только у вас есть sql_error, вы можете извлечь состояние sql из этого:

std::cerr  << "SQL STATE: " << s->sqlstate() << std::endl;

Таким образом, изменив вышеуказанный кодsippet:

pqxx::connection dbConn("dbname=tester user=foo");
pqxx::result r;
try
{
  pqxx::work transx(dbConn);
  std::string query ("SELECT name FROM compamy");
  r = transx.exec(query);
  transx.commit();  // Not necessary for a SELECT, but good practice
}
catch (const pqxx::pqxx_exception &e)
{
  std::cerr << e.base().what() << std::endl;
  const pqxx::sql_error *s=dynamic_cast<const pqxx::sql_error*>(&e.base());
  if (s) {
    std::cerr << "SQL Error code: " << s->sqlstate() << std::endl;
  }
}

Учитывая, что имя таблицы является компанией, а не компанией, получает следующий вывод:

SQL Error code: 42P01

Поиск этого кода из кодов ошибок Postgresql таблица:

42P01   undefined_table
...