День добрый
Я работаю с PostgreSQL 8.4
возникли проблемы при попытке вставить бинарные данные.
const char * paramValues[1]; int paramLengths[1]; int paramFormats[1]; int binaryIntVal = 4; paramValues[0] = (char*)&binaryIntVal; paramLengths[0] = sizeof(int);; paramFormats[0] = 1; res = PQexecParams(conn,"INSERT INTO table_user(user_accauntstr) VALUES ( $1::bytea[] )",1,NULL,paramValues,paramLengths,paramFormats,1);
В результате получаю ошибку:
PGRES_FATAL_ERROR: number of array dimensions (67108864) exceeds the maxi
mum allowed (6)
тип столбца в базе bytea[]
Что я не правильно делаю?
До сих пор максимум что добился это пройти по данным HEX-сом и сохранить как текст, но при этом их размер растет в 2 раза.
Задача в целом написать шаблон для сохранения, в базу и чтения обратно небольших структур размером от 10 до 1000 байт
Может быть так "INSERT INTO
Может быть так
"INSERT INTO table_user(user_accauntstr) VALUES ( $1::bytea[6] )"
нет, так результат остается
нет, так результат не изменяется
К тому же непонятно почему именно 6 ? ведь в параметрах передается 4 байта
Исключение из-за ограничения
Исключение из-за ограничения длины массива. Возможно не удается преобразовать значения входного параметра в нужный тип.
откуда берется ограничение ?
откуда берется ограничение ? При инсерте массив изначально пуст, так как его еще нет))
Да еще что хотелось бы добавить если подать команду без бинда параметров просто текст то все работает
res = PQexec(conn, "INSERT INTO table_users(user_accauntstr) VALUES ( '{0xFF,0x23,0x45,10}' )");
>откуда берется
>откуда берется ограничение
Не знаю, но ошибка говорит о превышении допустимого размера массива.
если успешно выполняется код, с явным указанием значений массива, значит проблема с преобразованием типов. Т.е. на входе не bytea[].
воз можно стоит сделать так
int binaryIntVal = 4;
paramValues[0] = {(char*)&binaryIntVal};
paramLengths[0] = {sizeof(int)};
paramFormats[0] = {1};
Предложенный вами код , к
Предложенный вами код , к сожалению компилятор не кушает.
да еще менял тип данных столбца на text тоже нет результата, там правда материться на недопустимый символ в последовательности, но это уже понятно больше почему.
мне кажется, что проблема все
мне кажется, что проблема все таки не в типе столбца, а в формате массива, который Postgres не может интерпритировать.