PG::NotNullViolation: ERROR: null value in column "id" violates not-null constraint
Se você vir este erro ao migrar um site usando ActiveRecord de MySQL para PostgreSQL, veja o que fazer a respeito.
Primeiro, lembre-se de que o ActiveRecord se configura magicamente a partir do que está sendo executado no banco de dados. É como ele descobre quais colunas são as id
colunas mágicas tão vitais para o funcionamento da maioria dos aplicativos.
Em segundo lugar, lembre-se de que o MySQL usa sequências de maneira diferente do PostgreSQL para determinar o próximo valor de um id. Quando você portou o esquema e os dados do MySQL para o PostgreSQL, essa parte da lógica não foi traduzida.
Juntando os dois pensamentos anteriores, percebemos que o que está acontecendo é que o banco de dados PostgreSQL recém-migrado não contém a lógica para autoincrementar a coluna id corretamente e , portanto , ActiveRecord não percebe que a coluna id deve ser tratada especialmente e tenta para inseri-lo como um valor nulo.
A solução é tripla:
- Altere as colunas de id em todas as suas tabelas para auto-incremento correto no PostgreSQL;
- Altere a sequência para ter o valor atual correto;
- Reinicie seu aplicativo para que o ActiveRecord possa recarregar.
Se precisar de mais ajuda, veja minha postagem no blog .