Ошибка 22001: значение не умещается в тип character varying(12)

Started by sw_alex, February 20, 2020, 08:09:35 AM

Previous topic - Next topic

sw_alex

Внезапно, в логах стала появляться каждые 5 минут такая ошибка:

Quote2020.02.20 09:07:29.795 *E* [db.drv             ] SQL query failed (Query = "INSERT INTO interfaces (node_id,if_type,if_index,mac_addr,required_polls,bridge_port,phy_chassis,phy_module,phy_pic,phy_port,peer_node_id,peer_if_id,description,admin_state,oper_state,dot1x_pae_state,dot1x_backend_state,peer_proto,alias,mtu,speed,parent_iface,iftable_suffix,id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT (id) DO UPDATE SET node_id=excluded.node_id,if_type=excluded.if_type,if_index=excluded.if_index,mac_addr=excluded.mac_addr,required_polls=excluded.required_polls,bridge_port=excluded.bridge_port,phy_chassis=excluded.phy_chassis,phy_module=excluded.phy_module,phy_pic=excluded.phy_pic,phy_port=excluded.phy_port,peer_node_id=excluded.peer_node_id,peer_if_id=excluded.peer_if_id,description=excluded.description,admin_state=excluded.admin_state,oper_state=excluded.oper_state,dot1x_pae_state=excluded.dot1x_pae_state,dot1x_backend_state=excluded.dot1x_backend_state,peer_proto=excluded.peer_proto,alias=excluded.alias,mtu=excluded.mtu,speed=excluded.speed,parent_iface=excluded.parent_iface,iftable_suffix=excluded.iftable_suffix"): 22001 ОШИБКА:  значение не умещается в тип character varying(12)
С чем связано, непонятно.

Filipp Sudanov

Какая версия сервера используется? Откуда ставилась - из пакетов, или компилировалась?
Какая база данных?

sw_alex

Сервер 3.1.361
Debian 9.12
Ставилась из пакетов (и обновлялась)
БД PostgreSQL 9.6

Victor Kirhenshtein

Похоже не влезает MAC адрес. Могут быть какие-то ноды с интерфейсами, у которых MAC длиннее 6 байт?

sw_alex

Маловероятно, но ведь всякое бывает.
Не могу понять, как мне найти ту ноду, которая вызывает ошибку.

Filipp Sudanov

Тут поможет дебаг на 9 уровне. В принципе он нужен только по тегу db.query, но сейчас драйвер базы данных сделан так, что он включает нужно логирование только если глобальный дебаг при старте равен 9.
Можно сделать так - указать DebugLevel = 9 в конфиге сервера и сразу после запуска выполнить
nxadm -c "debug 0"
nxadm -c "debug db.query 9"


В логе перед строчкой SQL query failed должны будут быть строки с расшифровкой полей SQL запроса, по ним можно будет определить с какой нодой это связано.

sw_alex

Да, это помогло. Действительно у одного компьютера обнаружился mac-адрес из 7 байт. Удалил интерфейс, просканировал заново, ошибка исчезла. Спасибо!