两周前,我在 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
,当一切配置正常时,它会工作,并负责使用适当的权限创建此目录。