Show all variations of 2 characters in postgres
with characters (c) as (
  select unnest(string_to_array('xy', null))
) 
select *
from characters c1
  cross join characters c2


Edit:

Apparently this does not work in 8.4, but the following should:

with characters (c) as (
  select unnest(regexp_split_to_array('xy', ''))
) 
select *
from characters c1
  cross join characters c2


Thanks to Bruno for testing this.