PostgreSQL, ODBC and long strings

Поиск
Список
Период
Сортировка
От charlie clark
Тема PostgreSQL, ODBC and long strings
Дата
Msg-id opsqmlf4yoyt02yl@mail.isis.de
обсуждение исходный текст
Список pgsql-odbc
Further to my earlier post I have done some investigating. It turns out
the problems is with all strings greater than 255 characters which are
automatically converted to LO.

The statement of the form

cursor.execute("SELECT value FROM table WHERE x = ?", (a_value, ))

where a_value is a string longer than 255 characters always generates an
error of the form
ProgrammingError: ('HY000', 7, 'ERROR:  type "lo" does not exist', 5898)

The ODBC.log

STATEMENT ERROR: func=SC_execute, desc='', errnum=7, errmsg='Error while
executing the query'
                  ------------------------------------------------------------
                  hdbc=28785640, stmt=28779072, result=28813312
                  manual_result=0, prepare=1, internal=0
                  bindings=0, bindings_allocated=0
                  parameters=28817032, parameters_allocated=1
                  statement_type=0, statement='SELECT id FROM
localekit_attributes where attribute = ?'
                  stmt_with_params='SELECT id FROM localekit_attributes
where attribute = '829028'::lo'
                  data_at_exec=-1, current_exec_param=-1, put_data=0
                  currTuple=-1, current_col=-1, lobj_fd=-1
                  maxRows=0, rowset_size=1, keyset_size=0, cursor_type=0,
scroll_concurrency=1
                  cursor_name='SQL_CUR01B72240'
                  ----------------QResult Info
-------------------------------
                  fields=28815040, manual_tuples=0, backend_tuples=0,
tupleField=0, conn=0
                  fetch_count=0, num_total_rows=0, num_fields=0,
cursor='(NULL)'
                  message='ERROR:  operator does not exist: text = lo',
command='(NULL)', notice='(NULL)'
                  status=7, inTuples=0
CONN ERROR: func=SC_execute, desc='', errnum=110, errmsg='ERROR:  type
"lo" does not exist'
             ------------------------------------------------------------
             henv=28785584, conn=28785640, status=1, num_stmts=16
             sock=28778336, stmts=28815080, lobj_type=-999
             ---------------- Socket Info -------------------------------
             socket=600, reverse=0, errornumber=0, errormsg='(NULL)'
             buffer_in=34283600, buffer_out=34291800
             buffer_filled_in=11, buffer_filled_out=0, buffer_read_in=11

It seems that the ODBC driver is not returning enough information about
the datatype text and that the Python ODBC driver is automatically
converting to a large object for strings more than 255 characters in
length.

What possible solutions are there to this problem? defining the lo type?
or improving the information provided by the ODBC driver?

Thanks for any pointers

Charlie
--
Charlie Clark
Helmholtzstr. 20
Düsseldorf
D-40215
Tel: +49-211-938-5360
GSM: +49-178-782-6226

В списке pgsql-odbc по дате отправления:

Предыдущее
От: charlie clark
Дата:
Сообщение: Problem with bound parameters
Следующее
От: Cris Carampa
Дата:
Сообщение: binary version of 08.00.0101 driver with bug 1262 fixed