Tôi không nghĩ vì vậy sử dụng char hoặc varchar thay vì số nguyên là một ý kiến hay. Thật khó để mong đợi nó sẽ chậm hơn bao nhiêu so với PK số nguyên, nhưng thiết kế này sẽ chậm hơn - tác động sẽ khủng khiếp hơn khi bạn tham gia các bảng lớn hơn. Nếu bạn có thể, hãy sử dụng các loại ENUM thay thế.
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)
Các kiểu varchar và char của PostgreSQL rất giống nhau. Việc triển khai bên trong cũng giống như vậy - char có thể chậm hơn một chút do có thêm khoảng trắng.