Кто нибудь юзал. У меня первое знакомство не удалось, ибо код:
Oid obj = lo_creat(conn, INV_READ | INV_WRITE);
if (obj == 0)
return "cannot create LO";
int fd = lo_open(conn, obj, INV_WRITE);
if (fd < 0)
return "cannot open LO";
int res = lo_write(conn, fd, data.get(), size);
вызывает ошибку в последней строчке — неверный дескриптор большого объекта. (lo_open возвращает 0)
PostgreSQL 9.6.3
Быть может это мертворожденное дитя и ни когда и не работало? Или я что-то не настроил?
Тем не менее на сколько это эффективно по сравнению с тем же файловым хранилищем или, скажем, NoSQL?
Здравствуйте, dosik, Вы писали:
D>Быть может это мертворожденное дитя и ни когда и не работало? Или я что-то не настроил?
All large object manipulation using these functions must take place within an SQL transaction block, since large object file descriptors are only valid for the duration of a transaction.
Не оно? Автокоммит выключен?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, dosik, Вы писали:
D>Кто нибудь юзал. У меня первое знакомство не удалось, ибо код:
D>D> Oid obj = lo_creat(conn, INV_READ | INV_WRITE);
D> if (obj == 0)
D> return "cannot create LO";
D> int fd = lo_open(conn, obj, INV_WRITE);
D> if (fd < 0)
D> return "cannot open LO";
D> int res = lo_write(conn, fd, data.get(), size);
D>
D>вызывает ошибку в последней строчке — неверный дескриптор большого объекта. (lo_open возвращает 0)
D>PostgreSQL 9.6.3
D>Быть может это мертворожденное дитя и ни когда и не работало? Или я что-то не настроил?
D>Тем не менее на сколько это эффективно по сравнению с тем же файловым хранилищем или, скажем, NoSQL?
Нужно перед "lo_open" выполнить PQexec(conn, "BEGIN");
После "lo_write" выполнить PQexec(conn, "END");
И будет вам счастье.
Здравствуйте, Ops, Вы писали:
Ops>Ops>All large object manipulation using these functions must take place within an SQL transaction block, since large object file descriptors are only valid for the duration of a transaction.
Ops>Не оно? Автокоммит выключен?
Да, оно. Спасибо.