postgresql 没有在 WSL 上启动?

postgresql 没有在 WSL 上启动?

两周前,我在 Windows Subsystem for Linux 中安装了 Ubuntu 18.04。

在那里,我使用以下命令安装了 PostgreSQL 11:

sudo apt-get install postgresql-11

当时,我可以使用以下命令启动我的 PostgreSQL:

sudo -u postgres /usr/lib/postgresql/11/bin/pg_ctl -D /etc/postgresql/11/main -l /var/log/postgresql/postgresql-11-main.log start

到目前为止,一切都很好。

两周后,我尝试使用相同的命令启动这个 PostgreSQL 引擎,但出现此错误:

"FATAL:  could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": No such file or directory"

我创建了该文件夹并将其提供给它chmod 777以避免权限问题。

然后我得到:

LOG:  database system was interrupted; last known up at 2019-02-16 17:57:02 STD
PANIC:  could not flush dirty data: Function not implemented
LOG:  startup process (PID 94) was terminated by signal 6: Aborted

知道可能是什么问题吗?

答案1

PostgreSQL 近期发生了一些与以下方面相关的变更:fsync事实证明,这是 Windows Linux 子系统的问题。PANIC您提到的具体错误目前正在 PG 邮件列表中讨论,并提出了一个补丁:

从 11.2 开始,WSL(Linux 上的 Windows 子系统)用户需要关闭 fsync

请注意,主题中建议的解决方法fsync是关闭不适用于生产用途。只有当您在 WSL 上使用 Postgres 并且并不真正关心数据的持久性时,这才是可以的。有人说 WSL 本身不适合生产使用。

/var/run/postgresql不存在 的事实完全无关。/var/run通常安装在 RAM 磁盘上,并由您使用手动启动程序绕过的启动脚本创建。典型的正常程序类似于systemctl start postgresql,当一切配置正常时,它会工作,并负责使用适当的权限创建此目录。

相关内容