fix non-nullable column for existing rows with server default#695
Merged
Conversation
Collaborator
Author
|
I would have caught this if I had created a new user prior to upgrading my local database to the new migration, then upgraded. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
Description
Failed deployment after enabling alembic in #693
The error you are seeing—
psycopg2.errors.NotNullViolation: column "is_active" of relation "users" contains null values—occurs because you are trying to add a non-nullable column to a table that already contains data.Why this is happening
The Constraint: Your migration
79b431f2e2f8_add_active_beta_billing_status.pyis attempting to executeALTER TABLE users ADD COLUMN is_active BOOLEAN NOT NULL.Existing Data: Your users table already has rows in it. When the database adds the new
is_activecolumn, it doesn't know what value to assign to these existing rows, so it defaults toNULL.The Conflict: Since you specified nullable=False, the database rejects the operation because those existing rows would immediately violate the "Not Null" rule.
How to Fix It
To fix this, you need to tell the database what value to use for existing rows. You can do this by adding a server_default in your migration file.
Go to the migration file mentioned in your logs (
/app/alembic/versions/79b431f2e2f8_add_active_beta_billing_status.py) and update theupgrade()function:Recommended Fix: Use
server_defaultBy submitting this pull request, I confirm that my contribution is made under the terms of the project's license.