Postgres permissions to insert, but not return.
Postgres permissions can be harsh. If you don't have the select permission on a table you might not be able to do some very rails like things that you think you ought to be able to do, take my friend Jimmy.
set role 'admin';
create role 'jimmy';
create table fruits (id serial primary key, name varchar);
grant insert on fruits to jimmy;
grant usage on fruits_id_seq to jimmy;
Given these permissions it's possible for Jimmy to make inserts into the fruit table like so:
set role 'jimmy';
insert into fruits (name) values ('Apple');
INSERT 0 1
But Rails wants a little more, it wants to know the id of the thing that was just created which is a problem because Jimmy doesn't have select permissions.
set role 'jimmy';
insert into fruits (name) values ('Orange') returning id;
ERROR: permission denied for relation fruits
Argh this complicates matters, but I'll relent and give Jimmy the appropriate permissions so that he can add records through ActiveRecord.
set role 'admin';
grant select on fruits to jimmy;
set role 'jimmy';
insert into fruits (name) values ('orange') returning id;
id
----
2
Tweet