在我全新的 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-10
:
https://packages.ubuntu.com/bionic/database/postgresql-10。您应该安装该包。
缺少错误以及服务确实存在的systemctl
事实令人困惑:这是因为这是一个“伞状”服务,它启动每个已安装和配置的 postgresql 实例。就您而言,您目前没有这样的实例,但就服务而言,这没问题。在最常见情况下,您可能同时运行多个不同版本的 PostgreSQL(来自不同的包),并且还有多个相同版本的实例(来自同一个包)。postgresql
postgresql
postgresql
postgresql-<version>
我建议使用pg_lsclusters
而不是检查你的 PostgreSQL 实例systemctl
。另请参阅pg_ctlcluster
以控制它们。
答案2
只需使用
service postgresql@10-main start
并且它有效。不知道为什么这种情况只发生在 18.04 中(我验证了 17.10,那里没有发生这种情况),但“伞”似乎无法枚举已安装的实例。
高血压,
答案3
2018 年 5 月 13 日
免责声明:这是PostgreSQL 10和Ubuntu 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
如果没有,只需添加它...让我们继续:
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 -Rsudo 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.logsudo 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 数据库
createuser
和dropuser
-> 不言自明
createdb
和dropdb
-> 不言自明
额外: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]