我想在远程Linux服务器上安装postgresql数据库。 为了在远程服务器上创build数据库,我在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
…等等。
Everthing工作正常,使用postgres安装并启动数据库。 问题出现在我想在postgreql中创build数据库的时候。 我发现我必须切换到'postgres'用户并运行psql才能执行任何与数据库相关的命令。 例如:
# su postgres # psql # create database test;
…但由于我通过远程python代码(如第一个示例中所示)顺序传递所有commnads,似乎很难从客户端一起运行这三个命令( su postgres , psql和create )。 有没有办法一起运行所有三个命令?
我运行以下命令:
# su postgres && psql && create database test;
…但只有第一个comamnd( su postgres )被执行。
试试这个,我没有testing
su - postgres -c 'psql -c "create database test"'
所以你是以postgres用户身份起诉的,并用create database命令运行psql命令。
尝试在非交互模式下使用psql。 例如:
psql -c "create database test"
另一种方法是使用createdb包装。 检查http://www.postgresql.org/docs/8.4/static/app-createdb.html
正如Mike所写的,以另一个用户的身份运行命令(本例中是postgres),使用su和-c选项。
其他的答案很好的解决了你在这个特定的命令行中遇到的问题,但是如果你正在从Python远程主机上工作,也许你应该看看Paramiko 。 这是一个howto 。
另一个select是织物 。