Как изменить запись в бд при достижении определенной даты?
Базы данных работают не так.
В данном случае статус избыточен, и его можно убрать из БД
Таким образом ничего и менять не надо будет
Как написал FanatPHP , поле  status излишне,
при необходимости иметь текущий статус подписки - можно создать представление:
create view subscriptions_status as select 
	id, user_id, created_at, end_at,
	case when end_at > now() then 1 else 0 end active
from subscriptions;

select * from subscriptions_status;

PostgreSQL view online