在远程服务器中创建数据库

在远程服务器中创建数据库

我想在远程 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、 和psqlcreate)似乎是不可能的。有没有办法一起运行这三个命令?

我运行以下命令:

# 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。

答案3

其他答案很好地解决了您在使用这个特定命令行时遇到的问题,但如果您正在使用 Python 在远程主机上工作,也许您应该看看波拉米科. 这是一个如何

另一种选择是织物

相关内容