BUG #17247: How to avoid crating multiple Foreign keys on same column on same table.

Started by PG Bug reporting formover 4 years ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 17247
Logged by: bipsy Nair
Email address: nbipin29@gmail.com
PostgreSQL version: 13.4
Operating system: Any OS
Description:

Issue: Postgres engine allows multiple FK on same columns for a same
table.This cause duplication and unwanted use of space . If we accidentally
run a script multiple times it creates the FK mulitple times.
Ran the following statement 3 times : to add a foreign key
ALTER TABLE admin.emp
ADD FOREIGN KEY (deptno)
REFERENCES admin.dept (deptno)
ON DELETE NO ACTION;

I see 3 its created thrice . In Oracle this statement should fail. Is there
any way this restriction can be applied on PG.
admin emp_deptno_fkey emp deptno admin dept deptno
admin emp_deptno_fkey1 emp deptno admin dept deptno
admin emp_deptno_fkey2 emp deptno admin dept deptno

Please advice.

#2Juan José Santamaría Flecha
juanjo.santamaria@gmail.com
In reply to: PG Bug reporting form (#1)
Re: BUG #17247: How to avoid crating multiple Foreign keys on same column on same table.

On Tue, Oct 26, 2021 at 9:07 AM PG Bug reporting form <
noreply@postgresql.org> wrote:

Issue: Postgres engine allows multiple FK on same columns for a same
table.This cause duplication and unwanted use of space . If we accidentally
run a script multiple times it creates the FK mulitple times.
Ran the following statement 3 times : to add a foreign key
ALTER TABLE admin.emp
ADD FOREIGN KEY (deptno)
REFERENCES admin.dept (deptno)
ON DELETE NO ACTION;

I see 3 its created thrice . In Oracle this statement should fail. Is there
any way this restriction can be applied on PG.
admin emp_deptno_fkey emp deptno admin dept deptno
admin emp_deptno_fkey1 emp deptno admin dept deptno
admin emp_deptno_fkey2 emp deptno admin dept deptno

Please advice.

Using a named constraint can prevent this:

ALTER TABLE admin.emp ADD CONSTRAINT emp_deptno_fkey FOREIGN KEY (deptno)
REFERENCES admin.dept (deptno) ON DELETE NO ACTION;

Regards,

Juan José Santamaría Flecha