在创建数据库之前,Postgres 中怎么会有 pg_roles table?

How is there a pg_roles table in Postgres before a database is created?

我正在研究 Postgres,在阅读时我发现您可以检查用户名(在命令行中使用 createuser 命令时使用)是否已经存在于 pg_roles table 通过输入:

psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='USR_NAME'"

进入命令行。我只是想知道,如果我还没有创建自己的数据库,怎么会有像 pg_roles 这样的现有 table,它们在哪里 stored/how 创建的?

其实pg_roles是一个观点。 The documentation:

This is simply a publicly readable view of pg_authid that blanks out the password field.

并且pg_authid不依赖于任何特定的数据库。它是在您创建数据库集群时创建的。 The documentation once more:

Because user identities are cluster-wide, pg_authid is shared across all databases of a cluster: there is only one copy of pg_authid per cluster, not one per database.