psqlコマンドの引数ですが、
-U username は「デフォルトのユーザではなくusernameユーザとしてデータベースに接続します(注記略)。」ということなので、
データベースに接続するユーザー名(=ロールでもあります)を指定するものです。
データベースそのものを指定するには、
-d dbname という別のものがあります。
データベースを保持・記録・検索するプログラムが、
ホスト名 or IPアドレスの指定によってどのホストで動作しているものを指すかを決めますし、
一つのホスト上で複数プログラムを動かすこともできるため区別するポート番号を指定しますし、
一つのPostgreSQLサーバープログラムが複数のデータベースを扱えるためデータベース名を指定しますし、
一つのデータベースに様々な権限をロール(ユーザー)で管理しているのでユーザー名を指定することで、
データベースを利用することが出来ます。
指定を省くことで、たまたまそのシェル上でデフォルトとされているもの、
ローカルホスト、5432ポート、デフォルトのデータベース、シェル上のユーザー名をつかってつなごうとします。
デフォルトの設定を与えるやり方はいくつもあるため、気になる場合には
第33章 libpq — C ライブラリの33.14. 環境変数 以降をチェックすると良いかもしれません。
データベースに保持されるデータはテーブルに格納されますが、
データベース内でスキーマという概念があり、スキーマの下にテーブル(やビュー)があります。
何もしなくてもpublicというスキーマがあって、スキーマを指定しない場合はpublicが使われます。
5.9. スキーマによると、
スキーマの使用が好まれる理由はいくつかあります。
・1つのデータベースを多数のユーザが互いに干渉することなく使用できるようにするため。
・管理しやすくなるよう、データベースオブジェクトを論理グループに編成するため。
・サードパーティのアプリケーションを別々のスキーマに入れることにより、他のオブジェクトの名前と競合しないようにするため。
スキーマは、入れ子にできないという点を除き、オペレーティングシステムのディレクトリと似ています。
という特徴があるので、使い方によってはデータベースが一つでもスキーマで分けておくことで
同じ名前のテーブル(やビュー)が組める使い方が出来ます。
便宜的に、データベースに接続するユーザー名(ロール)を使ってスキーマ名に流用するケースがあります。
データベースを分けてしまうと、複数のデータベースを横断するクエリーは成り立ちません。
逆に言うと、データベースを分けてしまえば干渉することなく管理できるとも言えます。