У Вас есть две опции. Нужно очистить ссылку как Горилла, на которую указывают в его сообщении. Вы делаете это путем установки в NULL ссылки или чего-то подобного, затем удаляете сообщения в правильном порядке, но это не то, что Вы обычно хотите сделать.
Вместо этого Вы, вероятно, хотите сделать каскадное удаление, но Ваша схема правильно не настроена для этого. Каскадное удаление означает, что сообщения, ссылающиеся на сообщение, которое Вы пытаетесь удалить, будут удалены также.
Синтаксис для установки таблицы для поддержки каскадов выглядит примерно так:
CREATE TABLE car(
car_id serial PRIMARY KEY,
owner_id integer NOT NULL REFERENCES owner ON DELETE CASCADE);
Если Вы установите свои таблицы как это удаление исходного сообщения (то владелец в примере) приведет к удалению всей ссылки сообщений (автомобили в примере). Вы избежите необходимости очищать ссылки и удалять все сообщения вручную.
В зависимости от типа базы данных Вы используете команду ALTER TABLE для представления каскадного удаления в схеме.