Хотя я согласен с Бобом Джарвисом в том, что это действительно преждевременная оптимизация, я постараюсь сосредоточиться на вопросе, как было задано.
Вы пренебрегаете самыми важными выборами. Ваши варианты включают:
smallint
enum
"char"
character
и character varying
Вы можете использовать перечисляемого типа. Это действительно нормально, если вы не хотите удалять допустимые значения, поскольку PostgreSQL в настоящее время не поддерживает удаление значений из типов перечислений.
В качестве альтернативы вы можете использовать тип данных "char"
. Да, цитаты имеют значение. Это один символ, например, тип данных C char
. Без котировок char
превращается в character(1)
во время разбора.
varchar
и character
не очень подходит для этого, потому что они переменная ширины типов с заголовочными накладными расходами и т.д.
Кстати, есть ли разница, чтобы установить поле varchar(1)
или varchar(100)
, по-прежнему говорить о производительности и пространстве?
№ Это ответ (много раз) в других вопросах.
Мы говорим о таблице с одним столбцом и одной строкой для хранения целочисленного значения в диапазоне [0,7]? – moooeeeep
Если вы беспокоитесь о влиянии одного символа на пространство на складе, вы можете путешествовать во времени с 1960-х годов. –
@NevilleK - мы тоже беспокоились об этом в 1970-х годах ... :-) –