while my items table has the item_code
column, I can have the same item_code
multiple times for different store_id
.
I do want to check on the DB level that my item_code
exists in my items
table, but when trying to do so, I get the following error:
[42830] ERROR: there is no unique constraint matching given keys for referenced table "items".
Indeed it's not unique, and I can't make it unique.
What I can do in this case to support foreign key check on item_code ?
CodePudding user response:
In your case this is not exactly a foreign key. I would suggest that you use a check
constraint to make sure that item_code
exists in items
table, no matter in which store. As you can not do that directly (subqueries are not allowed in check conditions), you will need a simple helper function.
create function item_code_exists(ic bigint) returns boolean as
$$
select exists (select from items where item_code = ic);
$$ language sql;
and then use a column definition in the other table DDL like this:
item_ref bigint check (item_code_exists(item_ref))
CodePudding user response:
You first have to create a UNIQUE
or PRIMARY KEY
constraint on the item_code
column of items
. A foreign key must reference a unique or primary key constraint.
Every table should have a primary key!