PostgreSQL 10 无法在 Ubuntu 18.04 下启动

PostgreSQL 10 无法在 Ubuntu 18.04 下启动

在我全新的 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 中唯一列出的软件包,没有明显的“apt”方法来安装旧版本的 PostgreSQL

答案1

结果是apt list --installed您实际上没有安装 PostgreSQL 10 服务器。

该包的名称正是postgresql-10https://packages.ubuntu.com/bionic/database/postgresql-10。您应该安装该包。

缺少错误以及服务确实存在的systemctl事实令人困惑:这是因为这是一个“伞状”服务,它启动每个已安装和配置的 postgresql 实例。就您而言,您目前没有这样的实例,但就服务而言,这没问题。在最常见情况下,您可能同时运行多个不同版本的 PostgreSQL(来自不同的包),并且还有多个相同版本的实例(来自同一个包)。postgresqlpostgresqlpostgresqlpostgresql-<version>

我建议使用pg_lsclusters而不是检查你的 PostgreSQL 实例systemctl。另请参阅pg_ctlcluster以控制它们。

答案2

只需使用

service postgresql@10-main start

并且它有效。不知道为什么这种情况只发生在 18.04 中(我验证了 17.10,那里没有发生这种情况),但“伞”似乎无法枚举已安装的实例。

高血压,

答案3

2018 年 5 月 13 日

免责声明:这是PostgreSQL 10Ubuntu 18.04,可能适用于其他版本,也可能不适用。PS:如果你最近一直在篡改语言设置,请告诉我,因为这可能与 postgres 故障有关

昨天我遇到了完全一样的问题,整个互联网上没有人可以帮助我,所以我采取了行动...而且成功了!

首先,如果您有任何包含您感兴趣的数据的数据库,我无法帮助您;您必须想办法备份所有数据。

现在开始实际步骤(这正是我所做的,你们之间的步骤[ ]可能会跳过):

sudo apt remove--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

德布http://cz.archive.ubuntu.com/ubuntu仿生主

如果没有,只需添加它...让我们继续:

sudo apt 更新
sudo apt 升级
sudo apt 安装 -y postgresql-10 postgresql-contrib postgresql-client
[ sudo apt 安装 -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 root /usr/lib/postgresql -R
sudo chmod 755 /usr/lib/postgresql -R

现在去编辑/etc/environment并将其添加到 PATH:/usr/lib/postgresql/10/bin

sudo chown 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 重启 ]


现在进入最后一部分:

sudo su
su postgres

要启动 postgresql:

pg_ctl 启动 -D /etc/postgresql/10/main -l /etc/postgresql/10/main/postgresql.log

结束它:

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

基本配置(进入postgresql解释器):

查询语言

\du+-> 列出 postgresql 用户
\l-> 列出 postgresql 数据库
createuserdropuser-> 不言自明
createdbdropdb-> 不言自明


额外:METASPLOIT

如果读者需要 metasploit 的 postgresql,可以关注 此链接(适用于 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

答案4

免责声明:这适用于 postgresql 10 和 ubuntu 18.04,可能适用于或不适用于其他版本。

跟着回答除承认外,由以下机构提供Mr Robot

  • 用户和组是postgres,因此命令应该使用chown -R postgres:postgres ...
  • /lib/systemd/system/postgresql.service虽然以某种方式管理 PostgreSQL 集群,但我不确定发生了什么?无论如何,我猜当我按照说明操作时它已经在运行,并且在重新启动(这应该是不必要的?)后它恢复在线,所以我猜它起作用了。/lib/systemd/system/[email protected]

相关内容