Ich denke nicht, dass die Verwendung von char oder varchar anstelle von integer eine gute Idee ist. Es ist schwer zu erwarten, wie viel langsamer es sein wird als Integer-PK, aber dieses Design wird langsamer sein - die Auswirkungen werden schrecklicher sein, wenn Sie größeren Tabellen beitreten. Wenn möglich, verwenden Sie stattdessen ENUM-Typen.
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 und char-Typen sind sehr ähnlich. Die interne Implementierung ist die gleiche - char kann (es ist paradox) etwas langsamer sein, da Leerzeichen hinzugefügt werden.