--
-- Avoid potential loops on parent_ids. An item must not be equal to
-- its own parent.  Note that this constraint is not guaranteed to
-- avoid all loops; it is still possible to create indirect recursive
-- loops but excludes some real-world problems.
--
--
-- Reduce the impact of adding a constraint on concurrent updates.
-- See: section on NOT VALID in https://www.postgresql.org/docs/current/sql-altertable.html
--
ALTER TABLE cr_items ADD CONSTRAINT cr_items_parent_id_ck CHECK (item_id != parent_id) NOT VALID;
ALTER TABLE cr_items VALIDATE CONSTRAINT cr_items_parent_id_ck;