# final result: CHECK-1 failed - the invalid row was accepted before the check constraint was dropped. ### pre-drop insert result # The test created the schema, table, and expression index, then attempted the invalid insert while the check constraint was still present. CREATE SCHEMA CREATE TABLE CREATE INDEX INSERT 0 1 ### constraint and index readback # The constraint catalog readback shows users_email_check still present and enforced before the drop. nspname | conname | contype | definition --------------+-------------------+---------+----------------------------------------------------------- check_case_1 | users_email_check | c | users_email_check CHECK strpos("email", '@') > 1 ENFORCED (1 row) # The expression index remained present. schemaname | indexname | indexdef --------------+-----------------------+--------------------------------------------------------------------------------------- check_case_1 | users_lower_email_idx | CREATE INDEX users_lower_email_idx ON check_case_1.users USING btree ((lower(email))) (1 row) ### drop and post-drop readback ALTER TABLE conname --------- (0 rows) indexname | indexdef -----------------------+--------------------------------------------------------------------------------------- users_lower_email_idx | CREATE INDEX users_lower_email_idx ON check_case_1.users USING btree ((lower(email))) (1 row) # The same invalid value was also accepted after the constraint was dropped. INSERT 0 1 id | email ----+--------------- 2 | invalid_again (1 row) The key defect signal is the first `INSERT 0 1`: `invalid_again` was accepted before `users_email_check` was removed, despite the recorded predicate requiring `strpos(email, '@') > 1`. The successful drop and preserved `users_lower_email_idx` are separate post-drop results.