I'm working with the c++ PostgreSQL libpqxx library and I'm not sure why I can't open a transaction/nontransaction object.
My code is currently as follows
#include <iostream>
#include <pqxx/pqxx>
using namespace std;
using namespace pqxx;
int main() {
// define variables
string params;
connection* pgsql;
string sql;
// db connection parameters
params = "dbname=dummy user=postgres password=postgres hostaddr=10.10.0.2 port=5431";
try {
// make connection
pgsql = new connection(params);
} catch(const exception &log) {
// connection failed
cerr << log.what() << endl;
}
// prepare sql
sql = " select * from categories where cat_idno = $1 ";
pgsql->prepare("categories", sql)("integer");
// execute transaction
// this bit doesn't work
work tr(pgsql);
result row = tr.prepared("categories")(1).exec();
tr.commit();
// disconnect
pgsql->disconnect();
}
It's making the connection to the database just fine and preparing my sql fine as well but it is failing to compile (I'm compiling on CentOS 5 btw)
g++ -o ./pgsqltest ./pgsqltest02.cpp -lpqxx
gives me the following errors
./pgsqltest02.cpp: In function ‘int main()’:
./pgsqltest02.cpp:24: error: no matching function for call to ‘pqxx::transaction<read_committed, read_write>::transaction(pqxx::connection*&)’
/usr/include/pqxx/transaction.hxx:102: note: candidates are: pqxx::transaction<ISOLATIONLEVEL, READWRITE>::transaction(pqxx::connection_base&) [with pqxx::isolation_level ISOLATIONLEVEL = read_committed, pqxx::readwrite_policy READWRITE = read_write]
/usr/include/pqxx/transaction.hxx:97: note: pqxx::transaction<ISOLATIONLEVEL, READWRITE>::transaction(pqxx::connection_base&, const std::string&) [with pqxx::isolation_level ISOLATIONLEVEL = read_committed, pqxx::readwrite_policy READWRITE = read_write]
/usr/include/pqxx/transaction.hxx:87: note: pqxx::transaction<read_committed, read_write>::transaction(const pqxx::transaction<read_committed, read_write>&)
I'm not sure why this would be, maybe I'm missing something very obvious
The error had to do with the compile command, it needed additional arguments that point to the libpqxx headers and binaries. The correct compile command was
g++ -o ./pgsqltest ./pgsqltest02.cpp -I /opt/libpqxx/include -L /opt/libpqxx/lib -lpq -lpqxx