isn. Типы данных для международных стандартов нумерации товаров
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Модуль предоставляет типы данных для международных стандартов нумерации товаров:
| Тип данных | Описание | Вывод в формате |
|---|---|---|
EAN13 | European Article Number, Европейский номер товара | Всегда в EAN13 |
ISBN13 | International Standard Book Number, Международный стандартный книжный номер | Новый EAN13 |
ISMN13 | International Standard Music Number, Международный стандартный музыкальный номер | Новый EAN13 |
ISSN13 | International Standard Serial Number, Международный стандартный серийный номер | Новый EAN13 |
ISBN | Международный стандартный книжный номер | Старый короткий формат |
ISMN | Международный стандартный музыкальный номер | Старый короткий формат |
ISSN | Международный стандартный серийный номер | Старый короткий формат |
UPC | Universal Product Code, Универсальный код товара | – |
Внутри все типы представляются одинаково (64-битными целыми числами), и все они взаимозаменяемы. Различные типы введены для управления форматированием при выводе и для строгой проверки правильности ввода, что и определяет конкретный тип номера.
Номера проверяются на входе согласно жестко заданному списку префиксов: этот список префиксов также применяется для группирования цифр при выводе.
Модуль isn предоставляет следующие пары приведений типов:
| Приведения | типов | |
|---|---|---|
| ISBN13 | <=> | EAN13 |
| SMN13 | <=> | EAN13 |
| ISSN13 | <=> | EAN13 |
| ISBN | <=> | EAN13 |
| ISMN | <=> | EAN13 |
| ISSN | <=> | EAN13 |
| UPC | <=> | EAN13 |
| ISBN | <=> | ISBN13 |
| ISMN | <=> | ISMN13 |
| ISSN | <=> | ISSN13 |
Модуль включает в себя стандартные операторы сравнения плюс поддержку индексов по хешу и B-деревьев для этих типов данных.
Реализуемые функции:
| Функция | Входные параметры | Возвращаемое значение | Описание |
|---|---|---|---|
isn_weak | boolean | boolean | Устанавливает облегченный режим проверки ввода и возвращает новое состояние |
isn_weak | – | boolean | Возвращает текущее состояние облегченного режима ввода |
make_valid | isn | isn | Исправляет неверный номер на верный (сбрасывает флаг ошибки) |
is_valid | isn | boolean | Проверяет наличие флага ошибки |
Примечание:
Облегченный режим проверки номера позволяет вставлять в таблицу неверные значения номеров. Под неверным значением понимается номер, в котором не соответствует проверочная цифра («ключ»), а не полное отсутствие номера.
При попытке вставить в таблицу неверный номер в облегченном режиме проверки номер будет вставлен с исправленной проверочной цифрой, но выводиться будет с восклицательным знаком (!) в конце (например,
0-11-000322-5!). Этот признак ошибки можно проверить с помощью функцииis_validи очистить функциейmake_valid.При вводе номера вместо проверочной цифры можно указать
?и нужная проверочная цифра будет вставлена автоматически.
Доработка
Доработка не проводилась.
Ограничения
Ограничения отсутствуют.
Установка
Модуль считается «доверенным», поэтому его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных:
CREATE EXTENSION isn SCHEMA ext;
Настройка
Настройка не требуется.
Использование модуля
Прямое использование типов
-
isbnSELECT isbn('978-0-393-04002-9');Пример вывода результата:
isbn
---------------
0-393-04002-X
(1 row) -
isbn13SELECT isbn13('0901690546');Пример вывода результата:
isbn13
-------------------
978-0-901690-54-8
(1 row) -
issnSELECT issn('1436-4522');Пример вывода результата:
issn
-----------
1436-4522
(1 row)
Приведение типов
Номер
EAN13можно привести к другому типу при условии, что этот номер будет допустимым для целевого типа.
-
недопустимое приведение типов:
SELECT isbn(ean13('0220356483481'));Пример вывода ошибки приведения:
ERROR: cannot cast EAN13(UPC) to ISBN for number: "0220356483481" -
приведение
EAN13к другому типу:SELECT upc(ean13('0220356483481'));Пример вывода результата:
upc
--------------
220356483481
(1 row) -
приведение другого типа к
EAN13:SELECT ean13(upc('220356483481'));Пример вывода результата:
ean13
-----------------
022-035648348-1
(1 row) -
создание таблицы с одним столбцом с типом данных
ISBN, добавим тестовые данные и проверим результат:CREATE TABLE test_isn (id isbn);
INSERT INTO test_isn VALUES('9780393040029');
SELECT * FROM test_isn;Пример вывода результата:
id
---------------
0-393-04002-X
(1 row)
Автоматическое вычисление проверочных цифр
-
используем знак
?для вставки в таблицу:INSERT INTO test_isn VALUES('220500896?');
INSERT INTO test_isn VALUES('978055215372?');Пример результата:
id
---------------
0-393-04002-X
2-205-00896-X
0-552-15372-9
(3 rows) -
используем знак
?для вызова функций:SELECT issn('3251231?');
SELECT ismn('979047213542?');Пример вывода результата:
issn
-----------
3251-2317
(1 row)
ismn
---------------
M-47213-542-3
(1 row)
Использование ослабленного режима
Установка ослабленного режима, вставка данных и возврат режима в прежний статус:
SELECT isn_weak(true);
INSERT INTO test_isn VALUES('978-0-11-000533-4');
INSERT INTO test_isn VALUES('9780141219307');
INSERT INTO test_isn VALUES('2-205-00876-X');
SELECT isn_weak(false);
Проверка результата:
SELECT id FROM test_isn WHERE NOT is_valid(id);
Пример вывода результата:
id
----------------
0-11-000533-3!
0-14-121930-0!
2-205-00876-5!
(3 rows)
Сброс признака ошибки номера:
UPDATE test_isn SET id = make_valid(id) WHERE id = '2-205-00876-X!';
Проверка результата сброса:
SELECT * FROM test_isn;
Пример вывода результата:
id
----------------
0-11-000533-3!
0-14-121930-0!
2-205-00876-5
(3 rows)
Вывод номеров ISBN13 из таблицы:
SELECT isbn13(id) FROM test_isn;
Пример вывода результата:
isbn13
--------------------
978-0-11-000533-1!
978-0-14-121930-1!
978-2-205-00876-0
(3 rows)
Ссылки на документацию разработчика
Дополнительно поставляемый модуль isn: https://www.postgresql.org/docs/13/isn.html.