我正在脚本系统设置,并已安装postgres。 这里是一个testing脚本(以root身份运行)来尝试在postgres中报告工作目录。 调用pwd
作为postgres给/var/lib/postgresql
。 但是testing..
#!/bin/bash su - postgres pwd > /home/me/postgres_report exit
..(显然)失败并报告原始工作目录。 之后,bash shell卡在postgres中,提示命令没有按照正确的顺序调用。 我了解这里的环境问题。 我不知道如何做我需要做的,这是自动化的postgres过程,我可以很容易地做交互(即进入postgres,执行一个命令,并退出)。 任何指针?
使用sudo
。
使用以下之一:
将一行命令传递给psql
sudo -u postgres psql -c "SELECT ..."`
一个这里的文件:
sudo -u postgres psql <<"__END__" SELECT ...; SELECT ...; __END__
(如果你希望能够在shell变量中替换掉,例如<<__END__
和反斜杠转义$
符号你不想成为变量)
传递一个文件到psql
sudo -u postgres psql -f /path/to/file
sudo -u postgres
当然只有当你需要成为postgres
系统用户才能通过peer
认证来运行postgres
数据库用户的任务时才需要。 否则,您可以使用psql -U username
, .pgpass
文件等
#!/bin/bash # run as root [ "$USER" = "root" ] || exec sudo "$0" "$@" echo "=== $BASH_SOURCE on $(hostname -f) at $(date)" >&2 sudo passwd postgres echo start the postgres sudo /etc/init.d/postgresql start sudo su - postgres -c \ "psql <<__END__ SELECT 'crate the same user' ; CREATE USER $USER ; ALTER USER $USER CREATEDB; SELECT 'grant him the priviledges' ; grant all privileges on database postgres to $USER ; alter user postgres password 'secret'; SELECT 'AND VERIFY' ; select * from information_schema.role_table_grants where grantee='""$USER""' ; SELECT 'INSTALL EXTENSIONS' ; CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"; CREATE EXTENSION IF NOT EXISTS \"pgcrypto\"; CREATE EXTENSION IF NOT EXISTS \"dblink\"; __END__ " sudo /etc/init.d/postgresql status sudo netstat -tulntp | grep -i postgres