Использовать столбец тип данных текст .
Каждый тип данных в PostgreSQL имеет текстовое представление - иначе простой pg_dump не будет работать. Кроме того, как пользователь будет вводить значение в первую очередь?
У меня было несколько таких случаев уже пару лет. Нет проблем.
Вы можете дополнительно сохранить фактический тип данных и при необходимости привести текстовое представление.
Одним из недостатков может быть то, что пространство на диске для представления текста будет больше для некоторых типов. Но издержки для нескольких столбцов / таблиц могут легко восполнить это.
Вас также может заинтересовать новый тип данных hstore
в PostgreSQL 9.0 . (Модуль существует дольше, но в 9.0 он был значительно улучшен.)
Дополнительный ответ на вопрос в комментарии
PostgreSQL чрезвычайно универсален с индексацией. Я бы разрешил случай, подобный тому, который вы упомянули в комментарии, с частичным индексом для выражения :
CREATE INDEX tbl_col_propx_idx ON tbl (cast(col AS int))
WHERE prop_type_id = 23; -- 23 signifying "propertyX"
И prop_type_id
будет внешним ключом для справочной таблицы (со ссылкой на внешний ключ):
CREATE TABLE prop_type(
prop_type_id int PRIMARY KEY,
prop_type text NOT NULL);
prop_type_id
также может быть enum
типа . Обработка перечислений была значительно улучшена в последней версии.
Тогда такой запрос будет очень быстрым:
SELECT *
FROM tbl
WHERE prop_type_id = 23 -- 23 signifying "propertyX"
AND col::int BETWEEN 50 AND 100
Кроме того, такой индекс автоматически подтвердит тип данных и выдаст ошибку, если вы попытаетесь ввести строку, которая не соответствует типу.