Числовые типы PostgreSQL
Таблица 3.13. Числовые типы PostgreSQL
Тип |
Размер |
Допустимые значения |
bigint, int8 |
8 байт |
Целые числа в интервале от -9 223 372 036 854 775 807 до 9 223 372 036 854 775 807 |
double precision, floats, float |
8 байт |
Вещественные числа, 15 значащих цифр, неограниченный размер (с ограниченной точностью) |
integer, int, int4 |
4 байта Переменный |
Целые числа в интервале от -2 147 483 648 до 2 147 483 647 |
real, float4 |
4 байта |
Вещественные числа, шесть значащих цифр, неограниченный размер (с ограниченной точностью) |
small int, int2 |
2 байта |
Целые числа в интервале от -32 768 до 32 767 |
money |
4 байта |
Вещественные числа с двумя цифрами в дробной части в интервале от -21 |
serial |
4 байта |
Целые числа в интервале от 0 до 2 147 483 647 |
Как видно из табл. 3.13, у некоторых типов данных PostgreSQL имеются синонимы, полностью эквивалентные исходным типам. Синонимы были созданы для удобства, хотя иногда это приводит к недоразумениям, поскольку некоторые синонимы встречаются в других языках программирования. Если не знать, с каким типом ассоциируется тот или иной синоним, возможны случайные ссылки на другие типы данных. Например, в PostgreSQL типы real и doubl e представляют значения, которые во многих языках относятся к типу float; при этом у обоих типов имеются синонимы, имена которых содержат слово «float» (float и flot8 относятся к double precision, float4 относится к real). Если вы попытаетесь использовать синоним f I oat, полагая, что он связан с типом real, возникнут проблемы, поскольку в действительности этот синоним связан с типом double precision.
Тип numeric Тип numeric (также называемый типом decimal) предназначен для представления сколь угодно больших или малых значений с фиксированной точностью, задаваемой пользователем. При создании таблицы с полем типа numeric в круглых скобках указываются два значения: точность и масштаб. Точность определяет максимальное количество цифр (включая цифры в дробной части), а масштаб определяет количество цифр только в дробной части. Если параметры не заданы, по умолчанию точность равна 30, а масштаб — 6. Максимальная точность (а следовательно, и максимальный размер), задаваемая таким образом, равна 1000. На практике 1000 цифр обычно вполне достаточно.
Примечание 1
Примечание 1
Предотвращение ошибок переполнения
booktcwn=# INSERT INTO numbers
VALUES (9.99999999);
INSERT 3390697 1
booktown=# SELECT * FROM numbers:
number
10.000000 (1 row)
booktown=# INSERT INTO
numbers VALUES (9999.99999999);
ERROR: overflow on numeric
AMS(value) >= 10*5 for field with precision
11 scale 6 booktown=# INSERT INTO
numbers VALUES (trunc(99999.99999999.6));
INSERT 3390698 1
booktown=# SELECT * FROM
numbers; number
10.000000 99999.999999 (2 rows)
booktown=# INSERT INTO
numbers VALUES (trunc0.99999999. 6));
INSERT 3390699 1
booktown=# SELECT * FROM numbers;
number
10.000000 99999.999999 9.999999
(3 rows)