isn. Типы данных для международных стандартов нумерации товаров#
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Модуль предоставляет типы данных для международных стандартов нумерации товаров:
Тип данных |
Описание |
Вывод в формате |
|---|---|---|
|
European Article Number, Европейский номер товара |
Всегда в |
|
International Standard Book Number, Международный стандартный книжный номер |
Новый |
|
International Standard Music Number, Международный стандартный музыкальный номер |
Новый |
|
International Standard Serial Number, Международный стандартный серийный номер |
Новый |
|
Международный стандартный книжный номер |
Старый короткий формат |
|
Международный стандартный музыкальный номер |
Старый короткий формат |
|
Международный стандартный серийный номер |
Старый короткий формат |
|
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-деревьев для этих типов данных.
Реализуемые функции:
Функция |
Входные параметры |
Возвращаемое значение |
Описание |
|---|---|---|---|
|
|
|
Устанавливает облегченный режим проверки ввода и возвращает новое состояние |
|
|
|
Возвращает текущее состояние облегченного режима ввода |
|
|
|
Исправляет неверный номер на верный (сбрасывает флаг ошибки) |
|
|
|
Проверяет наличие флага ошибки |
Примечание:
Облегченный режим проверки номера позволяет вставлять в таблицу неверные значения номеров. Под неверным значением понимается номер, в котором не соответствует проверочная цифра («ключ»), а не полное отсутствие номера.
При попытке вставить в таблицу неверный номер в облегченном режиме проверки номер будет вставлен с исправленной проверочной цифрой, но выводиться будет с восклицательным знаком (!) в конце (например,
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)
Ссылки на документацию разработчика#
Исходная документация PosgreSQL по модулю isn: https://www.postgresql.org/docs/15/isn.html.