Насколько я понимаю numeric, как и decimal хранят данные в строке, т.е. для хранения числа 1234567 используется 8 байт в которых записана строка '1234567'. Память сильно расходуется, да и вычисления наверно не очень быстрые получаются.
про память - на диске места мало? Про быстроту вычислений - каждый раз при обращении через libpq данные все равно возвращаются в тексте и их приходится конвертить. Не знаю как насчет реализаций в SQL SUM и т.п. - но скорее всего такая же фигня.
А int4 чем не устроил (если в int2 не влезает), но можно и int8 - этого уж точно должно хватить, иначе и правда только numeric поможет - но это что ж за числа?
Или наличие знака здесь является определяющим критерием? Но в int4 все равно памяти меньше пойдет - а по скорости - это смотря через какой интерфейс к базе обращаться, SQL здесь явно выиграет по скорости.
Вообще я сглупил, чего-то меня проглючило, что из 4 байт int4 при использовании только неотрицательных чисел будет _неиспользовано_ 2 байта, на самом деле неиспользуется только 1 бит. Извиняюсь, бес попутал, вопрос решен :)