Rails+PostgreSQL无法创建数据库问题求助
解决Rails 5连接PostgreSQL时的"Peer authentication failed for user 'postgres'"错误
这个问题很常见,原因是PostgreSQL默认对本地连接采用Peer认证——它会检查你的操作系统用户名和PostgreSQL用户名是否一致,而你当前用的操作系统用户(看起来是indu)和PostgreSQL里的postgres用户不同名,所以认证失败。即使你在database.yml里填了密码,Peer认证也不会用密码来验证。
下面给你两种可行的解决方案,选一种适合你的就行:
方案一:修改PostgreSQL的认证方式(匹配你现有的database.yml配置)
这个方法不需要改database.yml,直接调整PostgreSQL的认证规则:
- 找到PostgreSQL的配置文件
pg_hba.conf:- 如果你用的是Ubuntu/Debian系统,路径通常是
/etc/postgresql/你的PostgreSQL版本/main/pg_hba.conf(比如/etc/postgresql/10/main/pg_hba.conf) - 如果你用Homebrew安装的PostgreSQL(macOS),路径是
/usr/local/var/postgres/pg_hba.conf(Apple Silicon的Mac是/opt/homebrew/var/postgres/pg_hba.conf)
- 如果你用的是Ubuntu/Debian系统,路径通常是
- 打开这个文件,找到开头类似这样的行:
把local all postgres peerpeer改成md5,变成:local all postgres md5 - 保存文件后,重启PostgreSQL服务:
- Ubuntu/Debian:
sudo systemctl restart postgresql - macOS(Homebrew):
brew services restart postgresql
- Ubuntu/Debian:
- 现在再执行
rails db:create,应该就能成功创建数据库了。
方案二:创建和操作系统用户同名的PostgreSQL用户(更符合PostgreSQL的默认推荐)
如果你不想修改PostgreSQL的全局配置,可以创建一个和你当前操作系统用户(indu)同名的PostgreSQL用户:
- 打开终端,切换到PostgreSQL的默认管理员用户:
sudo -u postgres psql - 在PostgreSQL命令行里创建用户(替换密码为你想设置的):
CREATE USER indu WITH PASSWORD 'mypassword'; - 给这个用户赋予创建数据库的权限(因为Rails需要创建开发和测试数据库):
ALTER USER indu CREATEDB; - 输入
\q退出PostgreSQL命令行。 - 修改你的
database.yml,把username改成indu:default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: myapp_development username: indu password: mypassword test: <<: *default database: myapp_test username: indu password: mypassword - 执行
rails db:create,就能正常创建数据库了。
两种方法都能解决你的问题,选哪个看你的偏好~
内容的提问来源于stack exchange,提问作者Indu Pillai
相关产品推荐
相关产品推荐

