You can also look at citext type to avoid the casting.
customer_key integer DEFAULT nextval('customer_key_serial') PRIMARY KEY ,
cust_no smallint NOT NULL UNIQUE ,
name varchar UNIQUE ,
cust_no smallint NOT NULL UNIQUE ,
name varchar UNIQUE ,
Why do you have a surrogate primary key generated by a sequence when you have a natural key of either cust_no or name? Why not just declare the customer number to be the PK? Where does customer number come from anyway? Using smallint seems potentially short-sighted on potential future growth, but changing the type later should be minimal work as long as you don't have this customer_number denormalized many places, or use it as the FKey after dropping customer_key surrogate key.