Не удается запустить postgresql на WSL Ubuntu - PullRequest
6 голосов
/ 17 июня 2020

Я пытаюсь запустить свой экземпляр разработки Postgresql на моем локальном компьютере. Я использую Windows 10 Home (сборка 18363.900) с WSL Ubuntu 18.04.4 LTS. Я пробовал несколько вещей:

$ sudo systemctl start postgresql
System has not been booted with systemd as init system (PID 1). Can't operate.

(то же самое с перезапуском)

$ sudo /etc/init.d/postgresql start
 * Starting PostgreSQL 10 database server                                                          * Error: /usr/lib/postgresql/10/bin/pg_ctl /usr/lib/postgresql/10/bin/pg_ctl start -D /var/lib/postgresql/10/main -l /var/log/postgresql/postgresql-10-main.log -s -o  -c config_file="/etc/postgresql/10/main/postgresql.conf"  exited with status 1:
2020-06-16 20:36:37.334 PDT [8106] LOG:  could not bind IPv4 address "127.0.0.1": Permission denied
2020-06-16 20:36:37.334 PDT [8106] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2020-06-16 20:36:37.335 PDT [8106] WARNING:  could not create listen socket for "localhost"
2020-06-16 20:36:37.335 PDT [8106] FATAL:  could not create any TCP/IP sockets
2020-06-16 20:36:37.335 PDT [8106] LOG:  database system is shut down
pg_ctl: could not start server
Examine the log output.

(то же самое для postgres)

$ sudo service postgresql start
 * Starting PostgreSQL 10 database server                                                          * Error: /usr/lib/postgresql/10/bin/pg_ctl /usr/lib/postgresql/10/bin/pg_ctl start -D /var/lib/postgresql/10/main -l /var/log/postgresql/postgresql-10-main.log -s -o  -c config_file="/etc/postgresql/10/main/postgresql.conf"  exited with status 1:
2020-06-16 20:37:19.907 PDT [8140] LOG:  could not bind IPv4 address "127.0.0.1": Permission denied
2020-06-16 20:37:19.907 PDT [8140] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2020-06-16 20:37:19.907 PDT [8140] WARNING:  could not create listen socket for "localhost"
2020-06-16 20:37:19.907 PDT [8140] FATAL:  could not create any TCP/IP sockets
2020-06-16 20:37:19.908 PDT [8140] LOG:  database system is shut down
pg_ctl: could not start server
Examine the log output.

и просто в случае, если

$ sudo service postgres start
postgres: unrecognized service

служба мне не лучше.

Стоп, конечно, работает как положено:

$ sudo service postgresql stop
 * Stopping PostgreSQL 10 database server                                                  [ OK ]

но

sudo service postgresql restart

дает то же самое, что и start.

Status также дает мне ожидаемый результат:

$ sudo service postgresql status
10/main (port 5432): down

My / etc / hosts читает

# This file is automatically generated by WSL based on the Windows hosts file:
# %WINDIR%\System32\drivers\etc\hosts. Modifications to this file will be overwritten.
127.0.0.1       localhost
127.0.1.1       DESKTOP-LKMEB17.localdomain     DESKTOP-LKMEB17

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

, что заставляет меня поверить изменения в / etc / hosts не помогут

Я пытался убить postmaster, но его pid продолжает меняться каждый раз, когда я пытаюсь убить его, что заставляет меня поверить, что он вращается

$ ps -ef | grep postmaster | awk '{print $2}'
8151
$ ps -ef | grep postmaster | awk '{print $2}'
8154

Стрельба в темноте, чтобы убить процесс, тоже не работает, сбивает с толку

$ ps -ef | grep postmaster
me       298   116  0 15:35 tty3     00:00:00 grep postmaster
$ kill -9 300
-bash: kill: (300) - No such process
$ kill -9 298
-bash: kill: (298) - No such process
$ kill -9 299
-bash: kill: (299) - No such process
$ kill -9 301
-bash: kill: (301) - No such process
$ ps -ef | grep postmaster
me       300   116  0 15:36 tty3     00:00:00 grep postmaster

Что странно - я убил pid 300

Удивительно, но вроде ничего не слушает на локальном хосте: 5432

$ curl localhost:5432
curl: (52) Empty reply from server

Я не уверен, где go отсюда.

Ответы [ 2 ]

4 голосов
/ 26 июня 2020

Ответ, что вы не можете использовать systemd, довольно прост: WSL не поддерживает его с первого дня и до сих пор. Это известная проблема, и вы можете обратиться к этой проблеме, открытой в 2018 году и эта проблема с использованием аналогичной конфигурации Windows и WSL для получения дополнительной информации.

Проблема postgresql - еще одна известная проблема. Это исправлено в WSL 2, но поскольку вы все еще находитесь на WSL 1 , этот пост , в котором вам предлагается установить fsync=on и data_sync_retry=true, поможет вам решить проблему. Альтернативный способ решения проблемы - установить fsync=off. Для получения дополнительной информации о проблеме fsyn c в WSL вы можете обратиться к этой проблеме

1 голос
/ 25 июня 2020

Остановка службы просто сообщает вам, что служба не работает. Это не значит, что он остановил службу.

Когда вы пытаетесь найти PID постмастера, вы находите свой PID, пытаясь найти PID постмастера:

$ ps -ef | grep postmaster
me       300   116  0 15:36 tty3     00:00:00 grep postmaster

Когда вы используете curl для проверки порта 5432, он сообщает вам, что получил пустой ответ. Это означает, что что-то прослушивает порт 5432. Вы хотите увидеть сообщение «Не удалось подключиться».

Вы используете сервер postgresql на порту 5432 на хост-машине Windows? Если это так, это предотвратит запуск вашего порта изнутри WSL, и вы не сможете увидеть процесс оттуда.

Попробуйте изменить свой порт на 5433 на стороне WSL.

...