我正在尝试使用 bash 脚本在 CentOS 7 上自动安装和设置 PostgreSQL,我对此非常陌生,我希望能够得到一些帮助。
所以,到目前为止我有以下情况;
# Install PostgreSQL ( 9.6 )
curl -O https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
sudo rpm -ivh pgdg-centos96-9.6-3.noarch.rpm
sudo yum -y install postgresql96-server.x86_64 postgresql96-contrib.x86_64 postgresql96-devel.x86_64
# Init Postgresql
sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb
sudo systemctl enable postgresql-9.6
sudo systemctl start postgresql-9.6
# Configure remote access
sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/lib/pgsql/9.6/data/postgresql.conf
echo "host all all 10.0.2.2/32 md5" | sudo tee -a /var/lib/pgsql/9.6/data/pg_hba.conf
# Configure PostgreSQL user / database
sudo -u postgres psql -c "CREATE ROLE myboxname LOGIN UNENCRYPTED PASSWORD 'secret' SUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;"
sudo -u postgres /usr/bin/createdb --echo --owner=myboxname myboxname
除最后两行之外,一切都很完美。
当我运行第一行时,我得到以下输出;
could not change directory to "/home/username": Permission denied
CREATE ROLE
当我运行第二条命令时,我得到了这个;
could not change directory to "/home/username": Permission denied
CREATE DATABASE myboxname OWNER myboxname;
然后当我尝试运行时psql
我得到以下内容;
psql: FATAL: role "username" does not exist
我很困惑。
任何帮助都将不胜感激。
答案1
错误消息指向两个问题。首先,postgres 用户没有 /home/username 的权限。这种情况发生在 CentOS/Linux 级别。第二个错误是 postgres 找不到角色“username”。因此,首先您需要查看 postgres 用户是否设置正确。只需手动执行 sudo 即可检查:
cd ~postgres
sudo -u postgres -i
希望这里没有错误。然后您需要创建角色。我建议手动执行此操作(首先在脚本之外)以检查一切是否正常:
root# sudo -u postgres -i psql
psql (9.3.20)
Type "help" for help.
postgres=# create user username;
CREATE ROLE
如果此方法有效,那么您可以通过脚本自动执行该过程。drop user username
如果您想重新创建用户,可以运行以删除该用户。希望这对您有所帮助。