БД: ERROR: column «deleted_at» does not exist in table newsfeeds.

Ошибка `ERROR: column «deleted_at» does not exist in table newsfeeds` возникает в PostgreSQL (и других реляционных СУБД) когда приложение или ORM пытается обратиться к столбцу `deleted_at` в таблице `newsfeeds`, которого физически не существует в схеме базы данных. Это одна из наиболее распространённых проблем при работе с механизмом «мягкого удаления» (soft delete).

**Основные причины возникновения ошибки:**

1. **Миграция не была применена.** Наиболее частая причина — разработчик добавил колонку `deleted_at` в модель или ORM-конфигурацию, но не создал и не применил соответствующую миграцию базы данных. Проверьте список применённых миграций командой, например, `rails db:migrate:status` (Rails), `php artisan migrate:status` (Laravel) или аналогом в вашем фреймворке.

2. **Миграция была откатана.** Если кто-то выполнил `rollback`, колонка могла быть удалена из схемы, хотя код приложения всё ещё ожидает её наличия.

3. **Несоответствие окружений.** Колонка существует в development или staging, но отсутствует в production — миграции не были задеплоены.

4. **Ручное изменение схемы.** Кто-то удалил колонку напрямую через `ALTER TABLE newsfeeds DROP COLUMN deleted_at` без создания соответствующей миграции.

**Способы исправления:**

**Шаг 1 — Проверьте текущую схему таблицы:**
sql
d newsfeeds
— или
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = ‘newsfeeds’;

**Шаг 2 — Создайте и примените миграцию** (если колонки нет):
sql
ALTER TABLE newsfeeds ADD COLUMN deleted_at TIMESTAMP WITH TIME ZONE DEFAULT NULL;

Либо через ORM, например в Laravel:
php
$table->softDeletes(); // добавляет deleted_at

В Rails:
ruby
add_column :newsfeeds, :deleted_at, :datetime
add_index :newsfeeds, :deleted_at

**Шаг 3 — Примените все отложенные миграции** в production-окружении и убедитесь, что CI/CD-пайплайн включает шаг применения миграций перед деплоем.

**Шаг 4 — Если soft delete не нужен**, отключите его в модели: уберите `SoftDeletes` trait (Laravel), `acts_as_paranoid` (Rails) или соответствующую настройку ORM.

**Профилактика:** всегда синхронизируйте миграции между окружениями, используйте `schema.rb` или `structure.sql` как единый источник истины, и включайте проверку миграций в pre-deploy checklist.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.