Ваш вопрос имеет смысл, только если столбцы, о которых вы говорите, заполнены из последовательности.
Если я вас правильно понял, вы можете использовать этот запрос, чтобы выяснить, на сколько процентов исчерпаны доступные числа:
SELECT relname AS sequence_name,
coalesce(nextval(s.oid) /
CASE a.atttypid
WHEN 'smallint'::regtype THEN 32767::numeric
WHEN 'integer'::regtype THEN 2147483647::numeric
WHEN 'bigint'::regtype THEN 9223372036854775807::numeric
END, 0) * 100 AS percent_used
FROM pg_class AS s
JOIN pg_depend AS d ON d.objid = s.oid
JOIN pg_attribute a ON d.refobjid = a.attrelid
AND d.refobjsubid = a.attnum
WHERE s.relkind = 'S'
AND d.refclassid = 'pg_class'::regclass
AND d.classid = 'pg_class'::regclass
ORDER BY 2 DESC;
Предполагается, что существует связь между столбцом и последовательностью, которая устанавливается для столбцов serial
и bigserial
, а также для столбцов идентификаторов.
Этот бит совет, вероятно, приходит слишком поздно, но вы всегда должны использовать bigint
для сгенерированных ключей, потому что тогда вы никогда не столкнетесь с опасностью нехватки чисел.