STRAIGHT_JOIN is a hint that enforces JOIN order in MySQL.
PostgreSQL developers dislike hints, that's why PostgreSQL lacks this feature.
If you don't know / care what the JOIN order is, just omit this keyword:
SELECT  s.*, date_part('epoch', s.date) AS unixdate, 
        date_part('epoch', s.expire) as expireunix, u.username, u.fullname, 
        u.photo, u.email, t.topic, t.imageurl  
FROM    stories s, users u, topics t
WHERE   s.uid = u.uid
        AND s.tid = t.tid
MySQL doesn't implement any JOIN methods except for NESTED LOOPS, but PostgreSQL does.
JOIN order makes no sense for MERGE JOIN and cannot be forced in PostgreSQL for HASH JOIN.
You can make some of the columns non-sargable and this will force PostgreSQL to use intended JOIN order in case the optimizer chooses NESTED LOOPS:
SELECT  s.*, date_part('epoch', s.date) AS unixdate, 
        date_part('epoch', s.expire) as expireunix, u.username, u.fullname, 
        u.photo, u.email, t.topic, t.imageurl  
FROM    stories s, users u, topics t
WHERE   s.uid = (u.uid + 1) - 1
        AND t.tid = (s.tid + 1) - 1
This will force JOIN order in case NESTED LOOPS will be chosen by optimizer.
To force NESTED LOOPS, get rid or the equijoin in the query:
SELECT  s.*, date_part('epoch', s.date) AS unixdate, 
        date_part('epoch', s.expire) as expireunix, u.username, u.fullname, 
        u.photo, u.email, t.topic, t.imageurl  
FROM    stories s, users u, topics t
WHERE   s.uid > u.uid - 1
        AND s.uid < u.uid + 1
        AND t.tid > s.tid - 1
        AND t.tid < s.tid + 1