Не мисля, че използването на char или varchar вместо integer е добра идея. Трудно е да се очаква колко по-бавен ще бъде от integer PK, но този дизайн ще бъде по-бавен - въздействието ще бъде по-ужасно, когато се присъедините към по-големи маси. Ако можете, вместо това използвайте типове ENUM.
http://www.postgresql.org/docs/9.2/static /datatype-enum.html
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
CREATE TABLE person (
name text,
current_mood mood
);
INSERT INTO person VALUES ('Moe', 'happy');
SELECT * FROM person WHERE current_mood = 'happy';
name | current_mood
------+--------------
Moe | happy
(1 row)
PostgreSQL varchar и типовете char са много сходни. Вътрешната реализация е същата - char може да бъде (това е парадокс) малко по-бавно поради добавяне с интервали.