On Wednesday, March 21, 2018, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Louis Battuello <louis.battue...@etasseo.com> writes:
> >> The point is you can't resolve a name like "schema_1.something" unless
> >> you have USAGE on schema_1.  So the RI-checking query, which is run as
> >> the owner of the table, fails at parse time.
>
> > That certainly makes sense for user_2 that owns the reference table and
> is blocked by not having usage on the reference table’s schema.
>
> > But, user_1 owns both schemas and has usage on both but no longer owns
> the reference table in one schema. Why is user_1’s insert on the
> referencing table failing? Is the validation of the FK no longer done as
> user_1?
>
> Exactly, it's done as the owner of the referencing table.  (I don't recall
> whether that's uniformly true for all types of FK-enforcement queries,
> but evidently it's true for this case.)
>
>
Unless you mis-spoke and meant "referenced table" I'm confused because:

 alter schema test_schema_1 owner to user_1;
[...]
alter table test_schema_2.data_table owner to user_1;

test_schema_1.data_table is the referencing table and is owned by user_1 as
is test_schema_1 (which houses the referenced table reference_table)

Haven't tried to reproduce from the provided script but taking it at face
value the error about there being a schema permission error is unexpected
given that.

It would be useful to have the error report the user with the permission
problem and not just the target object.

>From the observed behavior basically one needs references permission to
create a foreign key constraint but doesn't need select permissions on the
pk/referenced table because the table itself will validate the constraint
on the supplied data.

And altering an owner of a table to one lacking usage and create
permissions on the schema is possible but unadvisible.

David J.

Reply via email to