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;
Настройка
Настройка не требуется.
Использование модуля
Прямое использование типов
-
isbn
SELECT isbn('978-0-393-04002-9');
Пример вывода результата:
isbn
---------------
0-393-04002-X
(1 row) -
isbn13
SELECT isbn13('0901690546');
Пример вывода результата:
isbn13
-------------------
978-0-901690-54-8
(1 row) -
issn
SELECT 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)
Ссылки на документацию разработчика
Исходная документация PosgreSQL по модулю isn: https://www.postgresql.org/docs/15/isn.html.