The statement that names of schema objects are unique isn't strictly true, just mostly true. Take the case of a unique constraints.
Concerning CONSTRAINTS you are right. Constraints seems to be an exception:
- Their name belongs to a schema, but are not necessarily unique within this context: https://www.postgresql.org/docs/current/catalog-pg-constraint.html.
- There is a UNIQUE index within the system catalog pg_constraints: "pg_constraint_conrelid_contypid_conname_index" UNIQUE, btree (conrelid, contypid, conname), which expresses that names are unique within the context of a table/constraint-type. Nevertheless tests have shown that some stronger restrictions exists across table-boarders (,which seems to be implemented in CREATE statements - or as a consequence of your mentioned correlation between constraint and index ?).
I hope that there are no more such exception to the global rule 'object names in a schema are unique': https://www.postgresql.org/docs/current/sql-createschema.html
This facts must be mentioned as a short note in glossary and in more detail in the later patch about the architecture.
J. Purtz