Prevent adding new records with null attributes
What does this MR do and why?
This MR is step 5 of making a column NOT NULL according to our database guidelines. This prevents adding new records with null attributes to the users and user_preferences tables.
Summary of changes
Migration out
up
bin/rails db:migrate
main: == [advisory_lock_connection] object_id: 226100, pg_backend_pid: 33757
main: == 20230823085514 AddNotNullToUserPreferencesColumns: migrating ===============
main: -- current_schema()
main: -> 0.0013s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE user_preferences\nADD CONSTRAINT check_d3248b1b9c\nCHECK ( tab_width IS NOT NULL )\nNOT VALID;\n")
main: -> 0.0009s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0003s
main: -- execute("ALTER TABLE user_preferences VALIDATE CONSTRAINT check_d3248b1b9c;")
main: -> 0.0005s
main: -- execute("RESET statement_timeout")
main: -> 0.0005s
main: -- current_schema()
main: -> 0.0002s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE user_preferences\nADD CONSTRAINT check_1d670edc68\nCHECK ( time_display_relative IS NOT NULL )\nNOT VALID;\n")
main: -> 0.0006s
main: -- execute("ALTER TABLE user_preferences VALIDATE CONSTRAINT check_1d670edc68;")
main: -> 0.0004s
main: -- current_schema()
main: -> 0.0003s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE user_preferences\nADD CONSTRAINT check_b22446f91a\nCHECK ( render_whitespace_in_code IS NOT NULL )\nNOT VALID;\n")
main: -> 0.0005s
main: -- execute("ALTER TABLE user_preferences VALIDATE CONSTRAINT check_b22446f91a;")
main: -> 0.0005s
main: == 20230823085514 AddNotNullToUserPreferencesColumns: migrated (0.1555s) ======
main: == [advisory_lock_connection] object_id: 226100, pg_backend_pid: 33757
ci: == [advisory_lock_connection] object_id: 226420, pg_backend_pid: 33760
ci: == 20230823085514 AddNotNullToUserPreferencesColumns: migrating ===============
ci: -- current_schema()
ci: -> 0.0003s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE user_preferences\nADD CONSTRAINT check_d3248b1b9c\nCHECK ( tab_width IS NOT NULL )\nNOT VALID;\n")
ci: -> 0.0009s
ci: -- execute("SET statement_timeout TO 0")
ci: -> 0.0003s
ci: -- execute("ALTER TABLE user_preferences VALIDATE CONSTRAINT check_d3248b1b9c;")
ci: -> 0.0006s
ci: -- execute("RESET statement_timeout")
ci: -> 0.0002s
ci: -- current_schema()
ci: -> 0.0003s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE user_preferences\nADD CONSTRAINT check_1d670edc68\nCHECK ( time_display_relative IS NOT NULL )\nNOT VALID;\n")
ci: -> 0.0005s
ci: -- execute("ALTER TABLE user_preferences VALIDATE CONSTRAINT check_1d670edc68;")
ci: -> 0.0005s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE user_preferences\nADD CONSTRAINT check_b22446f91a\nCHECK ( render_whitespace_in_code IS NOT NULL )\nNOT VALID;\n")
ci: -> 0.0004s
ci: -- execute("ALTER TABLE user_preferences VALIDATE CONSTRAINT check_b22446f91a;")
ci: -> 0.0006s
ci: == 20230823085514 AddNotNullToUserPreferencesColumns: migrated (0.0377s) ======
ci: == [advisory_lock_connection] object_id: 226420, pg_backend_pid: 33760
main: == [advisory_lock_connection] object_id: 226700, pg_backend_pid: 33763
main: == 20230823085824 AddNotNullToUsersColumns: migrating =========================
main: -- current_schema()
main: -> 0.0003s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE users\nADD CONSTRAINT check_693c6f3aab\nCHECK ( hide_no_ssh_key IS NOT NULL )\nNOT VALID;\n")
main: -> 0.0010s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0003s
main: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_693c6f3aab;")
main: -> 0.0005s
main: -- execute("RESET statement_timeout")
main: -> 0.0004s
main: -- current_schema()
main: -> 0.0003s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE users\nADD CONSTRAINT check_3a60c18afc\nCHECK ( hide_no_password IS NOT NULL )\nNOT VALID;\n")
main: -> 0.0005s
main: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_3a60c18afc;")
main: -> 0.0007s
main: -- current_schema()
main: -> 0.0002s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE users\nADD CONSTRAINT check_061f6f1c91\nCHECK ( project_view IS NOT NULL )\nNOT VALID;\n")
main: -> 0.0009s
main: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_061f6f1c91;")
main: -> 0.0005s
main: -- current_schema()
main: -> 0.0004s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0003s
main: -- execute("ALTER TABLE users\nADD CONSTRAINT check_c737c04b87\nCHECK ( notified_of_own_activity IS NOT NULL )\nNOT VALID;\n")
main: -> 0.0007s
main: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_c737c04b87;")
main: -> 0.0007s
main: == 20230823085824 AddNotNullToUsersColumns: migrated (0.0405s) ================
main: == [advisory_lock_connection] object_id: 226700, pg_backend_pid: 33763
ci: == [advisory_lock_connection] object_id: 226960, pg_backend_pid: 33766
ci: == 20230823085824 AddNotNullToUsersColumns: migrating =========================
ci: -- current_schema()
ci: -> 0.0003s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE users\nADD CONSTRAINT check_693c6f3aab\nCHECK ( hide_no_ssh_key IS NOT NULL )\nNOT VALID;\n")
ci: -> 0.0008s
ci: -- execute("SET statement_timeout TO 0")
ci: -> 0.0003s
ci: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_693c6f3aab;")
ci: -> 0.0005s
ci: -- execute("RESET statement_timeout")
ci: -> 0.0004s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE users\nADD CONSTRAINT check_3a60c18afc\nCHECK ( hide_no_password IS NOT NULL )\nNOT VALID;\n")
ci: -> 0.0006s
ci: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_3a60c18afc;")
ci: -> 0.0006s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE users\nADD CONSTRAINT check_061f6f1c91\nCHECK ( project_view IS NOT NULL )\nNOT VALID;\n")
ci: -> 0.0005s
ci: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_061f6f1c91;")
ci: -> 0.0006s
ci: -- current_schema()
ci: -> 0.0002s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE users\nADD CONSTRAINT check_c737c04b87\nCHECK ( notified_of_own_activity IS NOT NULL )\nNOT VALID;\n")
ci: -> 0.0006s
ci: -- execute("ALTER TABLE users VALIDATE CONSTRAINT check_c737c04b87;")
ci: -> 0.0006s
ci: == 20230823085824 AddNotNullToUsersColumns: migrated (0.0411s) ================
ci: == [advisory_lock_connection] object_id: 226960, pg_backend_pid: 33766
down
bin/rails db:rollback:ci && bin/rails db:rollback:main && bin/rails db:rollback:ci && bin/rails db:rollback:main
ci: == [advisory_lock_connection] object_id: 224820, pg_backend_pid: 30989
ci: == 20230823085824 AddNotNullToUsersColumns: reverting =========================
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_693c6f3aab\n")
ci: -> 0.0009s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_3a60c18afc\n")
ci: -> 0.0006s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_061f6f1c91\n")
ci: -> 0.0005s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_c737c04b87\n")
ci: -> 0.0004s
ci: == 20230823085824 AddNotNullToUsersColumns: reverted (0.0276s) ================
ci: == [advisory_lock_connection] object_id: 224820, pg_backend_pid: 30989
main: == [advisory_lock_connection] object_id: 224820, pg_backend_pid: 31542
main: == 20230823085824 AddNotNullToUsersColumns: reverting =========================
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_693c6f3aab\n")
main: -> 0.0009s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_3a60c18afc\n")
main: -> 0.0005s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_061f6f1c91\n")
main: -> 0.0008s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute(" ALTER TABLE users\n DROP CONSTRAINT IF EXISTS check_c737c04b87\n")
main: -> 0.0004s
main: == 20230823085824 AddNotNullToUsersColumns: reverted (0.0187s) ================
main: == [advisory_lock_connection] object_id: 224820, pg_backend_pid: 31542
ci: == [advisory_lock_connection] object_id: 224760, pg_backend_pid: 32339
ci: == 20230823085514 AddNotNullToUserPreferencesColumns: reverting ===============
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute(" ALTER TABLE user_preferences\n DROP CONSTRAINT IF EXISTS check_d3248b1b9c\n")
ci: -> 0.0008s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute(" ALTER TABLE user_preferences\n DROP CONSTRAINT IF EXISTS check_1d670edc68\n")
ci: -> 0.0003s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute(" ALTER TABLE user_preferences\n DROP CONSTRAINT IF EXISTS check_b22446f91a\n")
ci: -> 0.0005s
ci: == 20230823085514 AddNotNullToUserPreferencesColumns: reverted (0.0242s) ======
ci: == [advisory_lock_connection] object_id: 224760, pg_backend_pid: 32339
main: == [advisory_lock_connection] object_id: 224760, pg_backend_pid: 32759
main: == 20230823085514 AddNotNullToUserPreferencesColumns: reverting ===============
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute(" ALTER TABLE user_preferences\n DROP CONSTRAINT IF EXISTS check_d3248b1b9c\n")
main: -> 0.0008s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute(" ALTER TABLE user_preferences\n DROP CONSTRAINT IF EXISTS check_1d670edc68\n")
main: -> 0.0004s
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute(" ALTER TABLE user_preferences\n DROP CONSTRAINT IF EXISTS check_b22446f91a\n")
main: -> 0.0003s
main: == 20230823085514 AddNotNullToUserPreferencesColumns: reverted (0.0164s) ======
main: == [advisory_lock_connection] object_id: 224760, pg_backend_pid: 32759
How to set up and validate locally
Run bin/rails db:migrate
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #423001 (closed)
Edited by Abdul Wadood