Мне нужно сохранить содержимое std::vector<uint8_t>
в базе данных postgresql и иметь возможность снова его получить. Я использую библиотеку pqxx в качестве «оболочки» для подключения к базе данных.
Для хранения я делаю это:
std::string query = "INSERT INTO file_pivot(file_id, p_id, deviation) VALUES($1, $2, $3) RETURNING id";
pqxx::binarystring deviation((void*)&(data), data.size());
conn.prepare("file_insert", query);
pqxx::result res = worker.prepared("file_insert")(1)(pivot_id)(deviation).exec();
worker.commit();
Что работает и хранит его в базе данных, насколько я могу судить, проблема с последующим повторным выпуском чертового вектора.
То, что я пытался сделать, это:
pqxx::work sworker(conn);
std::string squery = "SELECT * FROM file_pivot WHERE file_id = $1";
conn.prepare("select_file", squery);
pqxx::result sres = sworker.prepared("select_file")(file_id).exec();
std::vector<uint8_t> rdata;
if(sres.size() > 0)
{
pqxx::binarystring sblob(res[0][3]);
std::vector<uint8_t>*rrdata = (std::vector<uint8_t>*) sblob.data();
rdata = *rrdata;
}
Но когда я тогда сравниваю исходный вектор data
с rdata
, вот так:
assert(std::equal(data.begin(), data.end(), rdata.begin()));
Я получаю ошибку сегментации, я пытался использовать rrdata->begin()
, а также ту же проблему.
Может кто-нибудь помочь с этим, это начинает действовать мне на нервы.