How to completely restrict a postgres role to a single schema
You have to revoke the users rights to the schema

Its kinda hard to revoke public schema as its default is well public which is granted automatically to any user granted access to database and all users are added to the public role. 

Commands like this have to be run

REVOKE ALL PRIVILEGES ON public FROM public;


There are lots of gotchas with this
here are a couple of articles going over how to do this READ them CAREFULLY and TEST  before doing it on a production machine 

https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf

https://blog.dbi-services.com/avoiding-access-to-the-public-schema-in-postgresql/

EDIT FORGET TO STATE

I have never tried to grant access from one schema that reads a table from another schema that user does not have access to..  This may not work as security should be passed up the chain blocking the read.  I DO NOT KNOW