【备忘录】关于在Rails6中执行rails db:create时无法连接到PostgreSQL的解决方法

这是关于什么的对话?

使用Rails6开发新应用时,在尝试使用本地的PostgreSQL时遇到了错误,以下是解决错误的过程。由于我是第一次使用PostgreSQL,对于错误的根本原因和规范是否能够理解并解决感到困惑。通过阅读错误信息并尝试解决,我大致明白了陷入了何种状态的错误,但在某一部分遇到了障碍,于是向认识的软件工程师朋友寻求了帮助。

发生的事情

在使用`rails _6.0.3.2_ new memo-app –database=postgresql`命令创建应用并指定了PostgreSQL数据库时,
当尝试使用`rails db:create`命令创建数据库时,遇到了下面的错误。

$ rails db:create
could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Couldn't create 'APP_NAME_development' database. Please check your configuration.
rails aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
***

简而言之,无法连接到PostgreSQL,无法创建数据库。

我做了以下事情:①重新启动了PostgreSQL并确认了状态。

$ brew services restart postgresql
Stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)

执行后,重新启动postgreSQL。

$ brew services list

我确认了状况。

Name       Status  User  Plist
postgresql error   yoshi /Users/yoshi/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

状态仍然出错。当然,即使继续执行,最初的错误也会再次显示出来。
在本地环境中有postgreSQL,并且可以启动,但是无法连接,这一点可以在这里看到。

我所做的事情2。

因为我在这里遇到了困难,所以向我作为软件工程师的前辈寻求了一句建议。
我收到了如下建议:尝试确认一下数据目录的状况。

$ postgres -D /usr/local/var/postgres

在确认后

FATAL:  database files are incompatible with server
***
DETAIL:  The data directory was initialized by PostgreSQL version 12, 
which is not compatible with this version 13.1.

有一个句子出现了:DB文件的兼容性存在问题。
由于Ver12初始化的当前数据目录与Ver13.1不兼容,因此无法使用。
这就是意思。

最后的结果

如果这样的话,那不就该更新一下吗?无论如何,这是一个假设。

在使用brew postgresql-upgrade-database进行升级后,
通过brew services restart postgresql重新启动。

再次尝试创建DB时,

$ rails db:create
Created database 'memo_app_development'
Created database 'memo_app_test'

由于成功创建了无事DB,问题已经解决。
根本原因是在某个时候创建的Ver12的DB中存在问题。
可能是由于不明所以,不小心输入了奇怪的命令导致了这种情况…。

文献资料

广告
将在 10 秒后关闭
bannerAds