Das brauchst Du nicht. Das, was Du im SELECT zu sehen bekommst, kannst Du manipulieren.
test=# create table wahr (t bool);
CREATE TABLE
test=*# insert into wahr values (0::bool);
INSERT 0 1
test=*# insert into wahr values (1::bool);
INSERT 0 1
test=*# select * from wahr;
t
---
f
t
(2 rows)
test=*# select case when t = 't'::bool then 1 else 0 end as t from wahr;
t
---
0
1
(2 rows)
test=*# select case when t = 't'::bool then 'A' else 'X' end as t from wahr;
t
---
X
A
(2 rows)
test=# create table wahr (t char(1) not null check (t ~ '[tf]'));
CREATE TABLE
test=*# insert into wahr values ('t');
INSERT 0 1
test=*# insert into wahr values ('0'::bool);
ERROR: column "t" is of type character but expression is of type boolean
HINT: You will need to rewrite or cast the expression.
Alternativ erzeugst Du eine neue Domain:
create domain wahr as char(1) not null check (value ~ '[tf]');