Сортировку решил используя подзапросы.
SELECT * FROM post WHERE date >(SELECT datepst FROM post WHERE id =$1) ORDER BY date ASC
2) Как я понял нельзя использовать INSERT и UPDATE в одном запросе , где нужно получить ошибку, если запись уже есть. В таком случае сработало использование транзакций.