Фильтрация данных postgres с использованием столбца bytea

У меня есть Java-приложение, которое вставляет элементы по мере их поступления от поставщика. Я фиксирую изображение продукта со штрих-кодом вместе с другой информацией (название, цена и т. Д.). Я сохраняю информацию о штрих-коде bytea в базе данных PostgreSQL. Поскольку у меня еще нет сканера штрих-кода, я фотографирую изображение штрих-кода и вставляю его следующим образом.

  //code extract
    File imgFile = new File(barcodeImage.jpg);
    FileInputStream fin=new FileInputStream(imgFile);
    pstmt2.setBinaryStream(19, fin,  (int) imgFile.length());  //inserts      into barcodeImage - bytea column

Теперь я хочу получить продукт из базы данных, используя изображение штрих-кода, которое я сохранил. что-то вроде:

         select * from stock_item where barcodeImage=***

Как я собираюсь фильтровать данные, используя столбец barcodeImage(bytea)? Так же, как работают сканеры штрих-кода.

2 ответа

Решение

Единственный способ - отсканировать изображение штрих-кода и сохранить его как varchar. по моему мнению

Если вы хотите сделать это в базе данных, вам понадобится библиотека, которая может декодировать штрих-коды из растровых изображений (PNG, JPEG и т. Д.), И вам нужно будет представить это как функцию PostgreSQL через процедурный язык (PL/Python, PL/Perl, C и т. Д.).

Лично я рекомендую не делать этого в БД. Передайте работу пулу внешних вспомогательных процессов, каждый из которых анализирует блок кодов и обновляет БД с помощью кода (если есть), найденного на изображении. Это дает вам больший выбор языка, изолирует базу данных от любых сбоев в программном обеспечении для декодирования штрих-кода и т. Д.

Мой первый поиск нашел zxing, библиотеку Java для декодирования штрих-кода. Поэтому я, вероятно, использовал бы это с PgJDBC для создания простого рабочего процесса, который извлекал изображение штрих-кода, декодировал его и обновлял строку с декодированным штрих-кодом. Если бы по какой-то причине мне действительно пришлось сделать это в БД, я бы либо использовал PL/Java (предупреждение, будь здесь драконы), либо нашел бы библиотеку декодирования штрих-кода для лучшего поддерживаемого языка в базе данных.

Пытаясь сделать это так, как вы описали, в WHERE пункт, будет совершенно безнадежным. Вы должны были бы декодировать штрих-код для каждого изображения в каждом запросе. Совершенно неуправляемый. Функциональный индекс работал бы, но его создание было бы чрезвычайно дорогостоящим, а обслуживание - кошмаром перед лицом обновлений библиотеки штрихкодов и т. Д. Вам необходимо предварительно обработать это.

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