В PostgreSQL тразнакция целостна. То есть, если выполняете DELETE FROM `post` WHERE `id` = 1, то все связанные удаления из `post_comment` будут в одной транзакции. Т.е. вариант 1.
Вы пытаетесть вставить запись, которая уже имеется в таблице. Проблема не в индексе, а в ограничении на уникальность записи. Проверьте unique constraint на вашей таблице.