A database is a named collection of SQL objects ("database
objects"). Generally, every database object (tables,
functions, etc.) belongs to one and only one database. (However
there are a few system catalogs, for example pg_database, that belong to a whole cluster and
are accessible from each database within the cluster.) More
accurately, a database is a collection of schemas and the schemas
contain the tables, functions, etc. So the full hierarchy is:
server, database, schema, table (or some other kind of object,
such as a function).

When connecting to the database server, a client must specify
in its connection request the name of the database it wants to
connect to. It is not possible to access more than one database
per connection. However, an application is not restricted in the
number of connections it opens to the same or other databases.
Databases are physically separated and access control is managed
at the connection level. If one PostgreSQL server instance is to house
projects or users that should be separate and for the most part
unaware of each other, it is therefore recommended to put them
into separate databases. If the projects or users are
interrelated and should be able to use each other's resources,
they should be put in the same database but possibly into
separate schemas. Schemas are a purely logical structure and who
can access what is managed by the privilege system. More
information about managing schemas is in Section 5.7.

Databases are created with the CREATE
DATABASE command (see Section 21.2) and destroyed with
the DROP DATABASE command (see Section 21.5). To determine the set
of existing databases, examine the pg_database system catalog, for example

SELECT datname FROM pg_database;

The psql program's \l meta-command and -l
command-line option are also useful for listing the existing
databases.

Note: The SQL
standard calls databases "catalogs", but there is no difference in
practice.