Nie wydaje mi się, aby używanie znaków typu char lub varchar zamiast liczby całkowitej było dobrym pomysłem. Trudno się spodziewać, o ile wolniejszy będzie niż integer PK, ale ten projekt będzie wolniejszy - wpływ będzie straszniejszy, gdy dołączysz do większych stołów. Jeśli możesz, użyj zamiast tego typów 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)
Typy varchar i char PostgreSQL są bardzo podobne. Wewnętrzna implementacja jest taka sama - char może być (to paradoks) nieco wolniejszy ze względu na dodawanie spacji.