RAISES_NEG int lobject_truncate(lobjectObject *self, size_t len) { int retvalue; PGresult *pgres = NULL; char *error = NULL; Dprintf("lobject_truncate: fd = %d, len = " FORMAT_CODE_SIZE_T, self->fd, len); Py_BEGIN_ALLOW_THREADS; pthread_mutex_lock(&(self->conn->lock)); #ifdef HAVE_LO64 if (self->conn->server_version < 90300) { retvalue = lo_truncate(self->conn->pgconn, self->fd, len); } else { retvalue = lo_truncate64(self->conn->pgconn, self->fd, len); } #else retvalue = lo_truncate(self->conn->pgconn, self->fd, len); #endif Dprintf("lobject_truncate: result = %d", retvalue); if (retvalue < 0) collect_error(self->conn, &error); pthread_mutex_unlock(&(self->conn->lock)); Py_END_ALLOW_THREADS; if (retvalue < 0) pq_complete_error(self->conn, &pgres, &error); return retvalue; }
static void my_truncate(PGconn *conn, Oid lobjId, pg_int64 len) { int lobj_fd; lobj_fd = lo_open(conn, lobjId, INV_READ | INV_WRITE); if (lobj_fd < 0) fprintf(stderr, "cannot open large object %u", lobjId); if (lo_truncate64(conn, lobj_fd, len) < 0) fprintf(stderr, "error in lo_truncate64: %s", PQerrorMessage(conn)); lo_close(conn, lobj_fd); }