Я пытаюсь выполнить операцию выбора для таблицы базы данных postgres и получаю следующее сообщение об ошибке:
[etb@centos etbtest]$ ./a.out
Opened database successfully: ETBDB
ERROR: relation "etb_reference.etb_member" does not exist
LINE 1: SELECT * FROM etb_reference.ETB_MEMBER
как мы можем ссылаться на имя схемы в exec-функции libpq ++?
Я пытался экранировать имя схемы с помощью других параметров экранирования, таких как "
, '
, \
и т. Д., Но это не помогло.
мой код:
try {
connection C("dbname = ETBDB user = etbadm password = etbtest \
hostaddr = 127.0.0.1 port = 5432");
if (C.is_open()) {
cout << "Opened database successfully: " << C.dbname() << endl;
} else {
cout << "Can't open database" << endl;
return 1;
}
work wrk(C);
result res = wrk.exec("SELECT * FROM etb_reference.ETB_MEMBER");
for (
pqxx::result::const_iterator row = res.begin();
row != res.end();
++row)
{
std::cout
<< row["MEMBER_ID"].as<int>() << "\t"
<< row["SYS_CRE_DATE"].as<std::string>() << "\t"
<< row["SYS_UPD_DATE"].as<std::string>() << "\t"
<< row["MEMBER_CS"].as<std::string>() << "\t"
<< row["MEMBER_TD"].as<std::string>() << "\t"
<< row["MEMBER_ASD"].as<std::string>() << "\t"
<< row["MEMBER_ITM"].as<std::string>() << "\t"
<< std::endl;
}
C.disconnect ();
return 0;
} catch (const std::exception &e) {
cerr << e.what() << std::endl;
return 1;
}
}
Iможет выполнять set search_path to 'schema'
, но я разбил базу данных на схемы, такие как таблицы приложений, справочные таблицы, таблицы конфигурации для легкого управления портированием и поддержкой с помощью автоматизированных сценариев оболочки и БД.