Discourse higher 3.2.0 (v3.3.3,…).
J’utilise PostgreSQL 15.3 (EnterpriseDB Advanced Server 15.3.0) sur x86_64-pc-linux-gnu, compilé par gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-16), 64-bit.
Lorsque j’exécute rake db:migrate, je rencontre cette erreur :
PG::NotNullViolation : ERREUR : une valeur nulle dans la colonne « first_unread_at » de la relation « user_stats » viole la contrainte not-null (PG::NotNullViolation)
DÉTAIL : La ligne défaillante contient (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)
J’ai investigué et découvert que la raison est que l’application essaie d’insérer une valeur nulle dans un champ qui n’est pas nul avec un current_timestamp par défaut.
Ma solution :
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;
Mais il y a beaucoup d’autres champs qui ne peuvent pas être insérés, je n’ai pas pu tous les trouver et les corriger en utilisant cette méthode.