Ik denk niet dat het een goed idee is om in plaats daarvan char of varchar te gebruiken. Het is moeilijk te verwachten hoeveel langzamer het zal zijn dan integer PK, maar dit ontwerp zal langzamer zijn - de impact zal groter zijn als je aan grotere tafels gaat deelnemen. Gebruik in plaats daarvan 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)
De typen PostgreSQL varchar en char lijken erg op elkaar. Interne implementatie is hetzelfde - char kan (het is paradoxaal) een beetje langzamer zijn vanwege toevoeging door spaties.