我有一个用户帐户 mayank
。我做了一个 initdb 来创建一个新的集群。
我有 PGDATA=C:\pgdata
。现在我想创建一个新的数据库。
当我执行 createdb db_test
时,它要求输入密码。那里需要什么密码。
我在 pg_hba.conf 中有以下条目
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
我使用 Windows 安装程序安装了 PostgreSql(双击并安装 :-))。它要求输入一个在这里不起作用的密码:(。我应该遗漏什么?
最佳答案
使用 One-Click Installer创建了两个不同的东西:
- Windows 帐户和“服务帐户”(拥有 postgresql.exe 进程的帐户)
- PostgreSQL(数据库) super 用户角色
这两个帐户的默认名称是(传统上)postgres
。安装后,您可以使用 net user
检查新创建的 Windows 帐户命令:
net user postgres
User name postgres
Full name postgres
Comment PostgreSQL service account
...
Active Yes
Password required Yes
...
您可以使用 psql 连接到具有 super 用户帐户的初始数据库之一,并检查集群定义的默认集群中的所有角色:
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
如果你想以 super 用户 mayank(和集群所有者 mayank)的身份创建新的数据库集群,那么你可以使用(假设你已经在 PATH 中有 PostgreSQL\version\bin 并且你以 mayank 身份登录):
cmd>initdb -U mayank -D C:\pgdata
cmd>pg_ctl -D C:\pgdata -o "-p 5440" -l C:\pgdata\log start
cmd>createdb -p 5440 test
它对我来说效果很好,无需提示输入密码。我刚刚检查了 C:\pgdata\pg_hba.conf
确实它包含:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
这很好,但在多用户环境中不安全。您可以使用 pg_ctl register 将 postmaster 作为 Windows 服务运行(就像默认的 5432 DB 集群一样),因此您也可以将 mayank 作为“服务帐户”。
关于Win32 : postgres password 中的 PostgreSql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101392/