Как мне получить результаты детальной ЗАГРУЗКИ ДАННЫХ из пакета golang MySQL?

#mysql #go

# #mysql #Вперед

Вопрос:

Я пишу программу Go, которая взаимодействует с базой данных MySQL. В MySQL, когда вы выполняете LOAD DATA запрос, в дополнение к обычной X rows affected строке вы получаете строку с более детальной информацией:

 mysql> LOAD DATA LOCAL INFILE 'many-lines.tsv' REPLACE INTO TABLE test_table (id, timestamp);
Query OK, 6 rows affected (0.01 sec)
Records: 3  Deleted: 3  Skipped: 0  Warnings: 0
 

Как описано здесь в разделе «Информация о результате утверждения».

Я хотел бы иметь доступ к этому из моей программы Go, но я не могу понять, как это сделать или возможно ли это вообще. sql.DB.Exec() возвращает a Result , но у него есть только RowsAffected поле. Это содержит сумму записанных строк удаленных строк и игнорирует пропущенные строки и, следовательно, неоднозначно (запись 3, удаление 2 и пропуск 2 — это то же самое, что запись 5, удаление 0 и пропуск 0).

Я просмотрел документацию для драйвера Go MySQL, но не смог найти там ничего, что делало бы то, что я хочу.

Есть ли способ получить доступ к этой информации?

Комментарии:

1. Спасибо за интересный вопрос. Я оставляю на ваше усмотрение написать запрос функции / запрос на извлечение для драйвера Go MySQL.

Ответ №1:

Информация на самом деле является ER_LOAD_INFO «ошибка» (условно информация) сообщение сервера.

Это передается как информационное сообщение в ответе OK с сервера.

Глядя на декодирование пакета OK в go, он не анализирует информацию (информацию о состоянии, читаемую человеком). При установлении соединения убедитесь, что clientSessionTrack является частью флагов подключения.

Итак, несколько небольших улучшений в драйвере Go MySQL, и вы сможете получить к нему доступ.

Комментарии:

1. Спасибо за исчерпывающий ответ / исследование!

2. Отправленная проблема: github.com/go-sql-driver/mysql/issues/1179