170 похожих чатов

Коллеги, вставил в структуру интерфейс с методами Value, Scan, в

базе (PostgreSQL) это поле JSONB и при селекте получаю ошибку:

sql: Scan error on column index 7, name "field_in_db": unsupported Scan, storing driver.Value type <nil> into type *InterfaceType

кто-нибудь сталкивался?

тут еще странно, что он звездочку перед именем интерфейса пишет...

38 ответов

34 просмотра

все сталкивались возвращай из Value строку, а не массив байт. ну или в запрос правильную конверсию воткни

Artur-Karapetov Автор вопроса
Daniel Podolsky
все сталкивались возвращай из Value строку, а не ...

в Value делаю Marshal и потом возвращаю string(b) . про запрос и правильную конверсию - не понял. можешь раскрыть пожалуйста?

Artur Karapetov
в Value делаю Marshal и потом возвращаю string(b) ...

Если поле jsonb+ pgx то func (s ProjectSettings) Value() (driver.Value, error) { return json.Marshal(s) } Если делать ресивер поинтер то вроде не работало

Artur-Karapetov Автор вопроса
Александр Костюченко
Если поле jsonb+ pgx то func (s ProjectSettings...

я же же вроде написал, что есть эти методы. ресивер и так и так пробовал.

Artur Karapetov
я же же вроде написал, что есть эти методы. ресив...

ты выше ещё написал что через string(b) делаешь

Artur-Karapetov Автор вопроса
Artur Karapetov
попробуй еще раз прочесть

"в Value делаю Marshal и потом возвращаю string(b)"

Artur-Karapetov Автор вопроса
Artur-Karapetov Автор вопроса

я вставил в БД сущность где это поле nil и теперь не могу селектнуть это. в поле null в базе.

Artur Karapetov
я вставил в БД сущность где это поле nil и теперь ...

А причем тут Marshall тогда, если при селекте Scan вызывается с анмаршалом?

Artur-Karapetov Автор вопроса
Artur Karapetov
в Value делаю Marshal и потом возвращаю string(b) ...

решил, что лениться стыдно `values ($1, $2, $3::json)` вот $3 - как раз это Valuer

Artur-Karapetov Автор вопроса
Artur-Karapetov Автор вопроса
Daniel Podolsky
решил, что лениться стыдно `values ($1, $2, $3::j...

проблема в том что, делаю INSERT, у поля стоит DEFAULT NULL. Далее делаю SELECT и получаю эту ошибку… то есть дело не в Value, а в Scan.

Artur Karapetov
проблема в том что, делаю INSERT, у поля стоит DEF...

ну так ты сделай свой скан умнее 🙂 там все равно конверсия типа же из any перед unmarshal

Artur-Karapetov Автор вопроса
Artur Karapetov
проблема в том что, делаю INSERT, у поля стоит DEF...

и тут я понял, что дефолт для jsonb полей должен быть`{}`

то есть - придется тебе в запрос воткнуть возврат {} в случае, если там null

Artur-Karapetov Автор вопроса
Daniel Podolsky
то есть - придется тебе в запрос воткнуть возврат ...

вставка работает как часы. а вот Scan не хочет вообше. изменил DEFAULT на ‘{}’::jsonb получил ошибку unsupported Scan, storing driver.Value type []uint8 into type *InterfaceTypeName в Scan даже дебаг не залетает (

Artur-Karapetov Автор вопроса
Artur Karapetov
вставка работает как часы. а вот Scan не хочет во...

раскурил. chatpgtv4 мощь, если правильно задать вопрос

Artur-Karapetov Автор вопроса
Daniel Podolsky
и что ты раскурил?

Просто интерфейс вытащить из БД нельзя. Надо обернуть интерфейс в структуру. Для структуры реализовать методы Scan и Value. type Field interface {} type FieldValue struct {} func (f FieldValue) Value() {} func (f FieldValue) Scan() {} Вот щас эксперементирую, пока не проверил

Artur Karapetov
Просто интерфейс вытащить из БД нельзя. Надо обер...

У тебя как-то сложно, будто. // Value implements driver.Valuer interface. func (s ProjectSettings) Value() (driver.Value, error) { return json.Marshal(s) } // Scan implements sql.Scanner interface. func (s *ProjectSettings) Scan(src any) error { if src == nil { return nil } b, ok := src.([]byte) if !ok { return fmt.Errorf("invalid type: %T", src) } return json.Unmarshal(b, s) }

Artur-Karapetov Автор вопроса
Artur Karapetov
Просто интерфейс вытащить из БД нельзя. Надо обер...

чет ты странное говоришь конечно, нельзя вытащить просто интерфейс, за ним должен быть конкретный инстанс конкретного типа

Artur-Karapetov Автор вопроса
Александр Костюченко
Да

а у меня интерфейс

Artur-Karapetov Автор вопроса
Artur Karapetov
я с этого вопрос начал ツ

но это очевидно же! какой Scan ты рассчитывал, что позовется?

Artur-Karapetov Автор вопроса
Daniel Podolsky
но это очевидно же! какой Scan ты рассчитывал, что...

вообще в голове было что будет скан в интерфейс в пустой же интерфейс можно засканить? что-то типа того

Artur Karapetov
вообще в голове было что будет скан в интерфейс в...

в пустой можно, там на этот случай специальная обработка

Artur-Karapetov Автор вопроса
Artur-Karapetov Автор вопроса
Daniel Podolsky
так а какая? четы ждал?

что и в непустой будет также работать ツ

Artur-Karapetov Автор вопроса

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Какой дос блять?
007
9
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Карта сайта