Postgres 9.3 дает ОШИБКУ: значения массива должны начинаться с... для шестнадцатеричного значения байта

Дается простая таблица:

PGresult   *res  = PQexec(usersconn, "CREATE TABLE userfiles (username
 varchar[100] PRIMARY KEY, mydata bytea);");

Я пытаюсь добавить данные с этим:

    PGresult   *res = PQexec(usersconn, "INSERT into userfiles VALUES ( 
'peter' , '\\\\x1A' );" );

или это:

PGresult   *res = PQexec(usersconn, "INSERT into userfiles VALUES ( 'peter' , '\x1A' );" );

и я получаю сообщение об ошибке о значениях массива должны начинаться с...

Что я делаю неправильно, пытаясь вставить простую шестнадцатеричную константу в эту запись?

2 ответа

Ваша проблема не в bytea поле, это username поле.

varchar[100] это массив 100 элементы varchar, каждый из которых имеет неограниченную длину.

Я думаю ты наверное имел ввиду varchar(100), один varchar скаляр длины 0-100.

Шестнадцатеричные значения должны использовать escape-синтаксис:

INSERT into userfiles VALUES ( 'peter' , e'\\x1A' );

См. http://www.postgresql.org/docs/9.3/static/datatype-binary.html

Другие вопросы по тегам