I'm trying to create a table that would enforce a unique combination of two columns of the same type - in both directions. E.g. this would be illegal:
col1 col2 1 2 2 1 I have come up with this, but it doesn't work:
database=> \d+ friend; Table "public.friend" Column | Type | Modifiers | Storage | Stats target | Description --------------+--------------------------+-----------+----------+--------------+------------- user_id_from | text | not null | extended | | user_id_to | text | not null | extended | | status | text | not null | extended | | sent | timestamp with time zone | not null | plain | | updated | timestamp with time zone | | plain | | Indexes: "friend_pkey" PRIMARY KEY, btree (user_id_from, user_id_to) "friend_user_id_to_user_id_from_key" UNIQUE CONSTRAINT, btree (user_id_to, user_id_from) Foreign-key constraints: "friend_status_fkey" FOREIGN KEY (status) REFERENCES friend_status(name) "friend_user_id_from_fkey" FOREIGN KEY (user_id_from) REFERENCES user_account(login) "friend_user_id_to_fkey" FOREIGN KEY (user_id_to) REFERENCES user_account(login) Has OIDs: no Is it possible to write this without triggers or any advanced magic, using constraints only?