Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как одним запросом определить, что тип данных является числовым ?  [new]
Cyrax_02
Member

Откуда:
Сообщений: 1429
Задача простая ?
Пакет https://github.com/petere/pguint устанавливает 5 базовых типов: int1, uint1, uint2, uint4, uint8.
проблема в том, что для этих типов поле "pg_type.typcategory" равен "U" (user type), а не "N" (numeric type).
И тем не менее, задача решается. Кто справится ?

Сообщение было отредактировано: 1 фев 21, 16:32
1 фев 21, 16:37    [22272680]     Ответить | Цитировать Сообщить модератору
 Re: Как одним запросом определить, что тип данных является числовым ?  [new]
grgdvo
Member

Откуда:
Сообщений: 122
Cyrax_02,

Что если исправить uint.sql и для CREATE TYPE поставить CATEGORY = 'N' ??
Будет категория число, что в общем-то даже и лучше для парсера понимать, что там у вас.
5 фев 21, 00:06    [22275193]     Ответить | Цитировать Сообщить модератору
 Re: Как одним запросом определить, что тип данных является числовым ?  [new]
Cyrax_02
Member

Откуда:
Сообщений: 1429
grgdvo
Что если исправить uint.sql и для CREATE TYPE поставить CATEGORY = 'N' ??
Будет категория число, что в общем-то даже и лучше для парсера понимать, что там у вас.

Да, можно исправить. Но вариант будет работать только для меня.
Решение должно быть общее, для всех. Т.е. должно работать после установки расширения uint по умолчанию (без правок скрипта).
Другие расширения также могут создавать новые целочисленные типы с категорией "U".

Согласно справке, категория "U" как раз и предназначена для всех пользовательских типов, не зависимо от их конкретного типа.
Т.е. указание категории "U" для пользовательского целочисленного типа формально является правильным, а "N" - неправильным.
5 фев 21, 20:34    [22276007]     Ответить | Цитировать Сообщить модератору
 Re: Как одним запросом определить, что тип данных является числовым ?  [new]
Guzya
Member

Откуда:
Сообщений: 700
Сейчас может чушь скажу, по классам операторов и возвращаемым значениям.
Например если определен +, то какой тип результата.
5 фев 21, 21:41    [22276026]     Ответить | Цитировать Сообщить модератору
 Re: Как одним запросом определить, что тип данных является числовым ?  [new]
grgdvo
Member

Откуда:
Сообщений: 122
Cyrax_02,

ну есть еще вот такие функции

test=> select int4in('123456');
 int4in 
--------
 123456
(1 строка)

test=> select int4in('123456abc');
ОШИБКА:  неверный синтаксис для типа integer: "123456abc"
7 фев 21, 10:21    [22276574]     Ответить | Цитировать Сообщить модератору
 Re: Как одним запросом определить, что тип данных является числовым ?  [new]
Cyrax_02
Member

Откуда:
Сообщений: 1429
Не знаю, может у меня одного такая проблема: никогда ничего не могу найти в справках поиском. Ни в MySQL, ни PostgreSQL, ни где-бы то ни было ещё. Вот и сейчас - если Яндекс не находит, то и поиск в официальной справке с вероятностью 99% тоже не найдёт. Пример - функция int4in. Хрен найдёшь.


grgdvo
Cyrax_02, ну есть еще вот такие функции
test=> select int4in('123456');
 int4in 
--------
 123456

(1 строка)
test=> select int4in('123456abc');
ОШИБКА:  неверный синтаксис для типа integer: "123456abc"
Чем использование этой функции принципиально отличается от каста вида '123456'::int4 и '123456abc'::int4 ?
И как эти конструкции могут помочь в проверке типа данных (например, uint4) на "целочисленность" ?
7 фев 21, 22:36    [22276855]     Ответить | Цитировать Сообщить модератору
 Re: Как одним запросом определить, что тип данных является числовым ?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4581
Cyrax_02,

int4in это внутренняя служебная функция... поэтому в доке ее нет (и в приложениях я бы на такие вещи не стал бы закладываться без крайней необходимости).

в доке они упомянуты в https://www.postgresql.org/docs/13/sql-createtype.html
в части base types ( input_function and output_function и тд).


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
7 фев 21, 23:02    [22276882]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить