我已将数据存储从默认/var/lib/pgsql/9.3/data
移至新磁盘以提高性能。一切顺利,服务器启动正常,但它停止接受5432端口上的请求。我已经做了一些研究,到目前为止我理解可能是在我的Linux发行版(CentOS 9.5)而不是/tmp/.s.PGSQL.5432
下,它被配置为使用其他路径。我试图改变unix_socket_directories但没有成功。
任何想法如何解决这个问题?
修改
以下是我更改数据文件夹的步骤
#In /etc/init.d/postgresql-9.3
PGDATA=/my_new_disc/pgdata/data
PGLOG=/my_new_disc/pgdata/data/pgstartup.log
# under root user
> mkdir /my_new_disc/pgdata/data
> chmod 775 /my_new_disc/pgdata/data
> chown postgres/my_new_disc/pgdata/data
# switch to postgres user
> su postgres
> initdb /my_new_disc/pgdata/data
在此之后,我能够成功运行服务,并且可以看到Postgres正在侦听端口5432,但只有在以postgres用户身份登录时才可以连接。
尝试
时,即使是同一台计算机上的root用户也无法正常工作psql -h localhost -U postgres postgres
它要求输入密码,并表示无法连接。
EDIT2 :
我想的另一个选择是使用符号链接......会更好吗?
答案 0 :(得分:0)
因为系统提示您输入密码,这意味着数据库正在侦听,但您需要配置连接方法。
您需要查看的配置文件位于/etc/postgresql/9.3/main/pg_hba.conf(您需要root用户才能编辑它)。
您将看到类似的行(在评论之后):
local all postgres peer host all all 127.0.0.1/32 md5
以“local”开头的行指的是unix套接字连接。 下一个条目是适用于哪些数据库(通常是“全部”)。 然后是适用于此的db用户ID。 对于“主机”行,您需要指定适用的IP范围。
您的问题与最后一个条目有关。 “peer”表示您必须以具有相同名称的unix用户身份登录。 “trust”表示数据库不会要求输入密码。并且“md5”将提示输入密码。
因此,如果您想以“postgres”用户身份连接到数据库,则需要看起来像这样的行:
local all postgres trust host all postgres 127.0.0.1/32 trust
然后, psql -U postgres postgres
不会要求输入密码。
postgres用户的配置行应该出现在所有用户的类似行之前(db将使用匹配的第一个规则)。
请注意,通过使用“trust”,任何人都可以在不提供密码的情况下登录数据库。您可能希望考虑在postgres用户的数据库中设置密码,然后将pg_hba.conf文件恢复为使用md5。