我想在远程 Linux 服务器上安装 postgresql 数据库。为了在远程服务器上创建数据库,我用 Python 编写了一个脚本来执行服务器上的命令。我按顺序运行命令,如下所示:
cmd = "wget http://yum.pgrpms.org/reporpms/8.4/pgdg-centos-8.4-2.noarch.rpm"
execute cmd
cmd = "rpm -Uvh http://yum.pgrpms.org/reporpms/8.4/pgdg-centos-8.4-2.noarch.rpm"
execute cmd
cmd = "yum install postgresql postgresql-server"
execute cmd
...等等。
在安装 postgres 并启动数据库之前,一切都运行正常。当我想在 postgreql 中创建数据库时,问题出现了。我发现我必须切换到“postgres”用户并运行psql
才能执行任何与数据库相关的命令。例如:
# su postgres
# psql
# create database test;
...但由于我通过远程 python 代码按顺序传递所有命令(如第一个示例所示),因此从客户端一起运行这三个命令(su postgres
、 和psql
和create
)似乎是不可能的。有没有办法一起运行这三个命令?
我运行以下命令:
# su postgres && psql && create database test;
su postgres
...但只执行第一个命令( )。
答案1
试试这个,我没有测试过
su - postgres -c 'psql -c "create database test"'
因此,您以 postgres 用户身份起诉并使用创建数据库命令运行 psql 命令。
答案2
尝试在非交互模式下使用 psql。例如:
psql -c "create database test"
另一种方法是使用 createdb 包装器。检查http://www.postgresql.org/docs/8.4/static/app-createdb.html
正如 Mike 所写,以另一个用户的身份运行命令(在本例中为 postgres),使用带有 -c 选项的 su。