БД: 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.
