Discourse выше версии 3.2.0 (v3.3.3,…).
Я использую PostgreSQL 15.3 (EnterpriseDB Advanced Server 15.3.0) на архитектуре x86_64-pc-linux-gnu, скомпилированный с помощью gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-16), 64-бит.
При запуске команды rake db:migrate возникает следующая ошибка:
PG::NotNullViolation: ERROR: null value in column "first_unread_at" of relation "user_stats" violates not-null constraint (PG::NotNullViolation)
DETAIL: Failing row contains (130, 0, 0, 0, 0, 0, 0, 2025-02-25 03:27:48.934913, null, null, 0, 0, 0, null, 0, 0, 0, null, 0, null, null, null, 0, 0)
Я провёл расследование и выяснил, что причина заключается в том, что приложение пытается вставить значение NULL в поле, которое не допускает NULL, при этом для него установлено значение по умолчанию current_timestamp.
Моё решение:
BEGIN;
ALTER TABLE user_stats
ALTER COLUMN first_unread_at SET NOT NULL,
ALTER COLUMN first_unread_at SET DEFAULT NOW();
COMMIT;
BEGIN;
ALTER TABLE user_stats
ALTER COLUMN first_unread_pm_at SET NOT NULL,
ALTER COLUMN first_unread_pm_at SET DEFAULT NOW();
COMMIT;
BEGIN;
ALTER TABLE group_users
ALTER COLUMN first_unread_pm_at SET NOT NULL,
ALTER COLUMN first_unread_pm_at SET DEFAULT NOW();
COMMIT;
Однако существует множество других полей, в которые невозможно вставить данные, и мне не удалось найти и исправить их все этим методом.