postgresql-целое число вне диапазона
не имею ни малейшего представления, какого черта это происходит..
Я установил таблицу соответственно:
CREATE TABLE raw (
id SERIAL,
regtime float NOT NULL,
time float NOT NULL,
source varchar(15),
sourceport INTEGER,
destination varchar(15),
destport INTEGER,
blocked boolean
); ... + index and grants
я успешно использовал эту таблицу некоторое время, и внезапно следующая вставка больше не работает..
INSERT INTO raw(
time, regtime, blocked, destport, sourceport, source, destination
) VALUES (
1403184512.2283964, 1403184662.118, False, 2, 3, '192.168.0.1', '192.168.0.2'
);
ошибка: ERROR: integer out of range
Я имею в виду comon... Даже не знаю, с чего начать отладку этого.. У меня нет дискового пространства, и сама ошибка довольно сдержанная..
1 ответов
SERIAL
столбцы хранятся в виде INTEGER
s, давая им максимальное значение 231-1. Итак, после ~2 миллиардов вставок, ваш новый id
значения больше не будут соответствовать.
если вы ожидаете, что это много вставок в течение жизни вашей таблицы, создайте его с помощью BIGSERIAL
(внутренне a BIGINT
, с максимумом 263-1).
если вы обнаружите позже, что a SERIAL
не достаточно большой, вы можете увеличить размер существующего поля с:
ALTER TABLE raw ALTER COLUMN id TYPE BIGINT;
обратите внимание, что это BIGINT
здесь BIGSERIAL
(as сериалы не настоящие типы). И имейте в виду, что если у вас действительно есть 2 млрд записей в таблице, это может занять некоторое время...