The first comment nailed the most likely reason this is happening. Quoting the release announcement:
PostgreSQL 15 also revokes the
CREATEpermission from all users except a database owner from the
public(or default) schema.
The reason your fix didn’t work is that all actions you took on database
postgres in regards to user
admin‘s privileges on schema
public concern only that schema within the database
public on database
postgres is not the same schema
public as the one on newly created
GRANT ALL ON DATABASE mydb TO admin;
grants privileges on the database itself, not things within the database.
admin can now drop the database, for example, still without being able to create tables in schema
public. My guess is that you wanted to make
admin also the owner of
mydb, in which case you need to add
ALTER DATABASE mydb OWNER TO admin;
Or you need to repeat your
GRANT USAGE, CREATE ON SCHEMA public TO admin; on
Here’s some more documentation on secure schema usage patterns the PostgreSQL 15 change was based on.