【问题标题】:Postgres not working when I change the data directory in Ubuntu当我在 Ubuntu 中更改数据目录时,Postgres 无法正常工作
【发布时间】:2017-06-30 16:42:51
【问题描述】:

我是 Linux 和 Postgres 的新手。我已经尝试将我的数据连接到另一个目录 2 天没有成功。

首先我在我的 postgres.conf 中更改了数据目录:

data_directory = '/var/lib/postgresql/9.6/main'

收件人:

data_directory = '/media/cesar/My Book/data9.6'

当我尝试连接到 Postgres 时出现此错误:

cesar@ubuntu:/$ sudo -u postgres psql postgres
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

我重新启动了 Postgres 服务器几次,并且更改了配置也没有成功。

如果我改回旧目录,它可以正常工作。

cesar@ubuntu:/$ sudo /etc/init.d/postgresql restart
[sudo] password for cesar: 
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
cesar@ubuntu:/$ sudo -u postgres psql postgres
psql (9.6.2)
Type "help" for help.
postgres=#

知道我做错了什么吗?

ls -s 响应

postgres@ubuntu:~$ ls -l /media/cesar/My\ Book/data9.6
total 149
drwxrwxrwx 1 cesar cesar     0 Jan  7 22:04 base
drwxrwxrwx 1 cesar cesar 16384 Feb  6 19:40 global
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_clog
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_commit_ts
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_dynshmem
-rwxrwxrwx 2 cesar cesar  4118 Jan  8 14:46 pg_hba.conf
-rwxrwxrwx 2 cesar cesar  1678 Jan  7 21:56 pg_ident.conf
drwxrwxrwx 1 cesar cesar 65536 Feb  6 00:16 pg_log
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_logical
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_multixact
drwxrwxrwx 1 cesar cesar     0 Feb  6 00:16 pg_notify
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_replslot
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_serial
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_snapshots
drwxrwxrwx 1 cesar cesar     0 Feb  6 00:16 pg_stat
drwxrwxrwx 1 cesar cesar     0 Feb  7 21:15 pg_stat_tmp
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_subtrans
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_tblspc
drwxrwxrwx 1 cesar cesar     0 Jan  7 21:56 pg_twophase
-rwxrwxrwx 2 cesar cesar     4 Jan  7 21:56 PG_VERSION
drwxrwxrwx 1 cesar cesar 32768 Feb  6 00:15 pg_xlog
-rwxrwxrwx 2 cesar cesar    90 Jan  7 21:56 postgresql.auto.conf
-rwxrwxrwx 1 cesar cesar 22267 Feb 12 14:25 postgresql.conf
-rwxrwxrwx 2 cesar cesar    67 Feb  6 00:16 postmaster.opts
-rwxrwxrwx 2 cesar cesar    35 Feb  6 00:16 postmaster.pid
-rwxrwxrwx 1 cesar cesar     3 Feb 12 14:52 test.txt

【问题讨论】:

  • 旧目录和新目录的权限和所有者是什么?
  • 致命:数据目录“/media/cesar/My Book/dataGE”具有组或世界访问权限详细信息:权限应为 u=rwx (0700)。
  • 我在尝试时收到该错误:cesar@ubuntu:/$ /usr/lib/postgresql/9.6/bin/pg_ctl -D /media/cesar/My\ Book/dataGE -l /tmp /pgsql.log 启动服务器启动
  • 我会尝试更改权限
  • 我做了这个 chmod -R 700 /media/cesar/My\ Book/dataGE 但我仍然有同样的错误

标签: linux postgresql ubuntu ubuntu-16.04


【解决方案1】:

用户postgres 应该对数据目录具有读、写和执行权限。其他用户不应具有写入权限。您可以通过以下方式设置这些权限:

chown -R postgres:postgres '/media/cesar/My Book/dataGE'
chmod -R u+rwx,g-rwx,o-rwx '/media/cesar/My Book/dataGE'

更改数据目录后,您应该运行initdb 来设置数据库文件:

su - postgres
initdb

【讨论】:

  • 如果我使用 sudo -su postgres 我可以成为 postgres 用户,但如果我尝试以 postgres 的身份打开服务器会给我同样的错误。谢谢!
  • 成为postgres用户后,可以读写数据目录吗?喜欢ls /path/to/dataecho hi > /path/to/data/test.txt
  • 这是我尝试过的 postgres@ubuntu:/media/cesar/My Book/data9.6$ 并且我访问了它
  • echo hi 以 ubuntu 用户身份在该目录中打招呼
  • 我不知道这很重要,但这是通过 USB SS 电缆连接的外部磁盘。它不会更改所有者和组,因为它是一个外部磁盘,所以我尝试使用 gksu gedit /etc/fstab 来映射磁盘并更改所有者。我仍然需要继续努力,我会尽快测试目录的变化。
【解决方案2】:

我想分享我的问题基本上是经过许可的。 当我检查日志文件时,数据库集群没有启动 >> pg_lsclusters >> sudo nano /var/log/postgresql/postgresql-9.6-main.log "致命:数据目录 "/var/lib/postgresql/9.6/main/" 具有组或世界访问权限详细信息:权限应为 u=rwx (0700)"

已经提到了解决方案,所以我刚刚执行 >> sudo chmod -R u=rwx '/var/lib/postgresql/9.6/main/' 并重新启动了 postgresql 服务 {notable 需要一些时间才能启动,这很好地表明了做某事}之后我检查 >> pg_lsclusters 并且是的它有效!

【讨论】:

    【解决方案3】:

    添加到@Jameel 和@Andomar 的答案(因为我在本地 postgres 数据库中遇到了这个问题),

    我的设置是本地 Postgres 数据库。而且我启用了数据库日志记录以查看数据库上正在运行哪些查询及其错误(仅供参考......我有一个休眠应用程序在后端持久保存到数据库并调试休眠问题,我觉得很容易检查 postgres 日志而不是杂耍记录器配置)。

    postgres 日志位于 /9.6/Data/logs 中。为了使用编辑器(例如:sublime text)打开日志,我向所有人添加了 只读 权限。尽管它并没有轻易停止我的 postgres 服务器,但在随后的重新启动尝试(例如重新启动笔记本电脑)后,postgres 服务器无法启动。

    因此,在 /9.6/Data 上递归删除所有人的所有权限解决了我的问题。我的意思是它应该只对 postgres 用户进行读写,并且必须没有其他权限。

    【讨论】:

      猜你喜欢
      • 2023-01-17
      • 2016-06-28
      • 2014-06-11
      • 2013-09-20
      • 2017-01-31
      • 1970-01-01
      • 2020-02-04
      • 2023-04-07
      • 2015-04-13
      相关资源
      最近更新 更多