在 Apple Silicon(M1/M2)Mac 上,解决在 Homebrew 上为 Phoenix Framework 安装 PostgreSQL 时出现的错误的方法是什么?

以下是解決在 Apple Silicon (M1/M2) Mac 上使用 Homebrew 安裝 PostgreSQL 給 Phoenix Framework 所遇到的錯誤的方法的說明。

呈現步驟

    1. 执行以下命令进行安装:brew install postgresql 或 brew install postgresql@14

执行 psql -U postgres
出现错误

错误1

如果出现这样的错误情况

psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?

当您忘记启动PostgreSQL时,将出现此错误。

首先,必须按照以下步骤进行。

    1. 执行 brew install postgresql 或者 brew install postgresql@14

执行 brew services start postgresql 或者 brew services start postgresql@14(根据之前的命令选择执行哪一个)

执行 psql -U postgres

常见的错误处理方法

如果在这种情况下出现任何错误

首先,我们要查看PostgreSQL的日志。PostgreSQL的日志位置如下所示。

`brew --prefix`/var/log/postgresql@14.log

(可能会有无法追加到14的情况)

用以下的命令来查看日志文件末尾的内容。

tail -100 `brew --prefix`/var/log/postgresql@14.log

如果发生错误,将显示退出错误代码1,错误或致命错误。

将此错误消息复制并与关键词 “postgresql” 一起在 Google 搜索。你可能会看到英语页面,但是不要害怕机器翻译!只需逐个解决问题,最终你应该能够通过 psql -U postgres 正常启动。

在执行这样的处理方法时,最好是先调查一下所使用的命令具体起到什么作用。这样做可以帮助我们获得更深入的理解,即使按照所写的进行操作时出现问题,也能够做出相应的应对。

第二个错误示例

如果出现以下错误的情况

FATAL: role postgres does not exist 

这个错误意味着不存在名为postgres的角色(用户)。

由于世界上存在各种不同环境针对这个错误进行的尝试和错误,因此我们花了很多心思来寻找与Apple Silicon Mac情景完美契合的案例。

在其中,我找到了以下的步骤。

 

由于这是适用于Intel Mac的步骤,因此适用于Apple Silicon Mac的情况将会是以下的方式。

/opt/homebrew/Cellar/postgresql/<version>/bin/createuser -s postgres

PostgreSQL的部分可能会变成postgresql@14。另外,在中,实际上可能会填入14.6等版本号。

我尝试编写了一份适用于Intel和Apple Silicon两种情况的操作步骤,并且尽可能用简单易懂的方式来让初学者理解。

首先,请在终端中输入以下命令:

`brew --prefix`

我会接着打下去。

`brew --prefix`/Cel

在这里按两次Tab键。接下来会显示如下(适用于Apple Silicon Mac)。

/opt/homebrew/Cellar/

这是一个名为”自动补全”的功能。使用这个功能可以用最少的按键输入命令。

我們繼續如下。

/opt/homebrew/Cellar/postgres

在这里也要击打制表键。然后根据实际安装的postgreSQL版本,会出现下列结果(或有候选项)。

/opt/homebrew/Cellar/postgresql@14/

如果再按一次Tab键,可能会自动补全的部分。在我的环境中,如下所示。

/opt/homebrew/Cellar/postgresql@14/14.6_1/

连续输入以下命令。

/opt/homebrew/Cellar/postgresql@14/14.6_1/bin/createuser -s postgres

这个命令是用来创建用户的。执行这个命令应该能够解决问题。

广告
将在 10 秒后关闭
bannerAds