Created
August 23, 2019 16:01
-
-
Save dillonhafer/e3455dc219a39f996ff785e1a5888fc3 to your computer and use it in GitHub Desktop.
I cannot explain why this works
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
create table users ( | |
name text not null primary key | |
); | |
create table groups ( | |
name text not null primary key, | |
owner text not null references users | |
); | |
create table groups_users ( | |
id serial primary key, | |
user_name text not null references users, | |
group_name text not null references groups, | |
unique (user_name, group_name) | |
); | |
alter table groups | |
add foreign key (name, owner) references groups_users (group_name, user_name); | |
insert into users (name) values ('my name'); | |
-- this fails | |
insert into groups (name, owner) values ('my group', 'my name'); | |
insert into groups_users (group_name, user_name) values ('my group', 'my name'); | |
-- this fails | |
begin; | |
insert into groups (name, owner) values ('my group', 'my name'); | |
insert into groups_users (group_name, user_name) values ('my group', 'my name'); | |
commit; | |
-- this works | |
with new_group as ( | |
insert into groups (name, owner) | |
values ('my group', 'my name') | |
returning name, owner | |
) | |
insert into groups_users (group_name, user_name) | |
select new_group.name, new_group.owner | |
from new_group; | |
--cleanup | |
drop table groups_users cascade; | |
drop table groups cascade; | |
drop table users cascade |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment