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 столбцы хранятся в виде INTEGERs, давая им максимальное значение 231-1. Итак, после ~2 миллиардов вставок, ваш новый id значения больше не будут соответствовать.

если вы ожидаете, что это много вставок в течение жизни вашей таблицы, создайте его с помощью BIGSERIAL (внутренне a BIGINT, с максимумом 263-1).

если вы обнаружите позже, что a SERIAL не достаточно большой, вы можете увеличить размер существующего поля с:

ALTER TABLE raw ALTER COLUMN id TYPE BIGINT;

обратите внимание, что это BIGINT здесь BIGSERIAL (as сериалы не настоящие типы). И имейте в виду, что если у вас действительно есть 2 млрд записей в таблице, это может занять некоторое время...