postgres database user grants to query database owned by other user The postgres learning curve is very steep for me I need help. (I come from a mysql background and have the bad habit of trying to translate my mysql knowledge to pg)

here is the premise:


I want to import a sql dump of a pg database into a new (clean) instance.
I want to have 2 users: 


dba which will own the database and be able to do DDL. 
app will be only able to SELECT, INSERT, DELETE and that sort of things.



With the research I did this is what I tought should work:

I psql -U postgres and do the following

CREATE ROLE "app" WITH ENCRYPTED PASSWORD '${APP_PASSWORD}' LOGIN;
CREATE ROLE "dba" WITH ENCRYPTED PASSWORD '${DBA_PASSWORD}' LOGIN;

REVOKE ALL ON SCHEMA public FROM PUBLIC;

GRANT ALL ON SCHEMA public TO "dba";

GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES ON ALL TABLES IN SCHEMA public TO "app";
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO "app";
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO "app";

ALTER DEFAULT PRIVILEGES FOR USER "dba" IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES ON TABLES TO "app";
ALTER DEFAULT PRIVILEGES FOR USER "dba" IN SCHEMA public GRANT EXECUTE ON FUNCTIONS TO "app";
ALTER DEFAULT PRIVILEGES FOR USER "dba" IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO "app";


Then I login with dba and do

CREATE DATABASE "mydb";


Then I import my sql dump with psql

psql -U dba -c mydb &lt; dump.sql


Then I see my data and tables with the user dba.

With the user app tho, I can connect with psql to mydb but when I do \dt I don't see my tables and a select returns:

mydb=&gt; select * from mytable limit 10;
ERROR:  relation "mytable" does not exist
Your app user should be created like this.
Create the user:
CREATE ROLE &quot;app&quot; WITH ENCRYPTED PASSWORD '${APP_PASSWORD}' LOGIN;

Run this on mydb database.
Grant Connect to DB:
GRANT CONNECT ON DATABASE mydb to app; 

Grant Usage:
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO &quot;app&quot;;
GRANT USAGE ON ALL TABLES IN SCHEMA public TO &quot;app&quot;;

Grant Other privileges:
GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES ON ALL TABLES IN SCHEMA public TO &quot;app&quot;;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO &quot;app&quot;;