2

В моей свежей Ubuntu 18.04 -

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04 LTS
Release:    18.04
Codename:   bionic

Установил PostgreSQL 10 -

$ apt list --installed | grep -i postgres
postgresql-client-10/bionic,now 10.3-1 amd64 [installed]
postgresql-client-common/bionic,bionic,now 190 all [installed,automatic]
postgresql-common/bionic,bionic,now 190 all [installed,automatic]
postgresql-server-dev-10/bionic,now 10.3-1 amd64 [installed]
postgresql-server-dev-all/bionic,bionic,now 190 all [installed]

service и systemctl возвращаются немедленно без сообщений, но не запускают процесс postgres -

$ sudo service postgresql restart
$ sudo systemctl restart postgresql

Я полностью в темноте, так как нет ни конфа, ни лога -

$ ll /etc/postgresql
total 8
drwxr-xr-x  2 root root 4096 Feb  8 12:26 ./
drwxr-xr-x 95 root root 4096 May  6 04:11 ../

$ ll /var/log/postgresql/
total 8
drwxrwxr-t  2 root postgres 4096 Feb  8 12:26 ./
drwxrwxr-x 10 root syslog   4096 May  6 04:10 ../

То, что там происходит? Любой указатель будет высоко ценится.

Изменить: что еще хуже, PostgreSQL 10 является единственным перечисленным пакетом в Ubuntu 18.04, нет очевидного "подходящего" способа установки более старой версии PostgreSQL

5 ответов5

3

Из apt list --installed вас фактически не установлен сервер PostgreSQL 10.

Имя пакета точно такое же, как postgresql-10 :https://packages.ubuntu.com/bionic/database/postgresql-10 . Вы должны установить этот пакет.

Отсутствие ошибки systemctl и тот факт, что сервис postgresql существует, сбивают с толку: это потому, что postgresql - это "зонтичный" сервис, который запускает каждый экземпляр postgresql, установленный и настроенный. В вашем случае у вас в настоящий момент нет такого экземпляра, но это нормально, если речь идет о сервисе postgresql . В наиболее общем случае у вас может быть несколько разных версий PostgreSQL, работающих одновременно (из разных пакетов postgresql-<version>), а также несколько экземпляров одной и той же версии (из одного пакета).

Я бы посоветовал проверять ваши экземпляры PostgreSQL с помощью pg_lsclusters а не systemctl . Смотрите также pg_ctlcluster для управления ими.

1

05/13/2018

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это для postgresql 10 и Ubuntu 18.04, и может работать или не работать для других версий. PS: Если вы в последнее время вмешивались в языковые настройки, пожалуйста, скажите мне, потому что может быть связь с ошибкой postgres

Вчера у меня возникла точно такая же проблема, и никто во всем Интернете не мог мне помочь, поэтому я стал мошенником ... И это сработало!

Прежде всего, если у вас есть какая-либо база данных с данными, которые вы хотите сохранить, я не могу вам помочь; вам нужно будет найти способ сделать резервную копию всех ваших данных.

Теперь перейдем к реальным шагам (это именно то, что я сделал, шаги между [ ] вы можете пропустить):

sudo apt удалить --purge postgres *
[sudo apt remove --purge pg *]
sudo apt autoremove
sudo apt autoclean
sudo apt clean
[sudo find / -name "* postgres *" -type f -delete] -> это может удалить любые резервные копии

Теперь убедитесь, что у вас есть эта строка в /etc/apt/sources.list

deb http://cz.archive.ubuntu.com/ubuntu bionic main

Если нет, просто добавьте это ... Давай продолжим:

Обновление sudo
Обновление sudo
sudo apt install -y postgresql-10 postgresql-contrib postgresql-клиент
[sudo apt install -y postgresql-server pgadmin3] -> это вам может понадобиться для metasploit
[перезагрузка sudo]

Теперь вы должны проверить, были ли созданы необходимые каталоги:
/etc/postgresql/10/main -> файлы конфигурации
/usr/lib/postgresql/10/bin -> скрипты и исполняемые файлы
/var/run/postgresql -> временные файлы
/var/lib/postgresql/10/main -> папки

Если что-то из этого не существует, я не могу вам помочь. Вы также должны убедиться, что пользователь postgres существует. Давайте продолжим:

sudo chown root /usr /lib /postgresql -R
корень sudo chgrp /usr /lib /postgresql -R
sudo chmod 755 /usr /lib /postgresql -R

Теперь перейдите в файл /etc/environment и добавьте его в PATH: /usr/lib/postgresql/10/bin

Судо Чоун postgres /etc /postgresql -R
sudo chgrp postgres /etc /postgresql -R
sudo chmod 700 /etc /postgresql -R

sudo echo ""> /etc/postgresql/10/main/postgresql.log
sudo chown postgresql /etc/postgresql/10/main/postgresql.log
sudo chgrp postgresql /etc/postgresql/10/main/postgresql.log
sudo chmod 700 /etc/postgresql/10/main/postgresql.log

sudo mkdir /var/run/postgresql/10-main.pg_stat_tmp
sudo chown postgres /var/run/postgresql/10-main.pg_stat_tmp -R
sudo chgrp postgres /var/run/postgresql/10-main.pg_stat_tmp -R
sudo chmod 700 /var/run/postgresql/10-main.pg_stat_tmp -R


Создайте /var/lib/postgresql/.bashrc и запишите это

shopt -s histappend
HISTSIZE=1000
HISTFILESIZE=2000
shopt -s checkwinsize
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    color_prompt=yes
    else
    color_prompt=
    fi
fi 
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
source /etc/environment

А потом:

sudo chown postgresql /var/lib/postgresql/.bashrc
sudo chgrp postgresql /var/lib/postgresql/.bashrc
sudo chmod 664 /var/lib/postgresql/.bashrc
[перезагрузка sudo]


А теперь финальная часть:

судо су
su postgresql

Для запуска postgresql:

pg_ctl start -D /etc /postgresql /10 /main -l /etc/postgresql/10/main/postgresql.log

Чтобы закончить это:

kill $(cat /var/run/postgresql/10-main.pid)

Базовая конфигурация (введите интерпретатор postgresql ):

PSQL

\du+ -> список пользователей postgresql
\l -> список баз данных postgresql
createuser и dropuser -> говорят сами за себя
createdb и dropdb -> говорят сами за себя


ЭКСТРА: МЕТАСПЛОЙТ

Если кому-то, читающему это, нужен postgresql для metasploit, вы можете перейти по этой ссылке (она для 16.04, но отлично работает в 18.04), однако есть ошибка: в какой-то момент вам нужно будет запустить это:
rvm --default use ruby-${RUBY_VERSION}@metasploit-framework gem pristine --all вместо предложенного:
rvm --default use ruby-${RUByVERSION}@metasploit-framework

Кроме того, если у вас возникнут проблемы с установочной частью пакета ruby , эта команда может спасти вам жизнь: gem pristine --all

0

Просто используйте

service postgresql@10-main start

и это работает. Не знаю точно, почему это происходит только в 18.04 (я проверил 17.10, и этого не происходит), но «зонтик», похоже, не может перечислить установленные экземпляры.

НТН,

0

Была такая же проблема здесь. Удалил все, что связано с postgres (apt remove --purge), удалил все оставшиеся каталоги из postgres 9 и снова переустановил postgres 10. Затем появились файлы конфигурации в /etc /postgresql / и база данных могла быть запущена. НТН.

0

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это для postgresql 10 и Ubuntu 18.04, и может работать или не работать для других версий.

Следуйте ответу, предоставленному Mr Robot за исключением признания:

  • Пользователь и группа являются postgres , поэтому команды должны использовать chown -R postgres:postgres ...
  • Я не уверен, что случилось с /lib/systemd/system/postgresql.service хотя каким-то образом /lib/systemd/system/postgresql@.service управляет кластером PostgreSQL? В любом случае, я думаю, он уже работал к тому времени, когда я следовал инструкциям, и после перезагрузки (что должно быть ненужным?) он вернулся в онлайн, так что я думаю, что это работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .