如何在SH脚本中使用SQL命令

时间:2012-10-16 05:27:37

标签: database postgresql sh

我当前的脚本看起来像这样:

!/bin/sh 
sudo -u postgres createdb mydb
sudo -u postgres psql mydb
CREATE TABLE person (first VARCHAR(32), last VARCHAR(32));
CREATE TABLE thing (size VARCHAR(32), price VARCHAR(32));
exit 0;

截至目前,当我执行脚本时,它会创建数据库并将其记录到其中。但是,在将我登录到mydb之后,脚本不会继续执行CREATE TABLE命令。

对于这些东西我是新手,所以我不知道我是否正确地采用这种方式。基本上我只想要一个创建数据库的脚本,然后在其中创建一些表(使用PostgreSQL)。

3 个答案:

答案 0 :(得分:3)

一种方法是使用here-doc(这是一个shell功能,取决于你正在运行的shell):

psql mydb <<EOF
    CREATE TABLE person (first VARCHAR(32), last VARCHAR(32));
    CREATE TABLE thing (size VARCHAR(32), price VARCHAR(32));
EOF

另一种方法是将命令写入受保护的(带权限)临时文件,然后将其作为脚本传递给postgres -f FILENAME选项。

答案 1 :(得分:1)

#!/bin/bash

psql -d mydb -U postgres -c "CREATE TABLE person (first VARCHAR(32), last VARCHAR(32));"
psql -d mydb -U postgres -c "CREATE TABLE thing (size VARCHAR(32), price VARCHAR(32));"

您可以使用-c选项运行所有查询。

答案 2 :(得分:1)

在将hba_conf文件编辑为“local all postgres trust”之后(我使用了信任,所以我不必为我的脚本提供密码),我使用了TraviJuu的建议,现在我的脚本完美无缺。这是最终结果的样子。

!/ bin / sh的

sudo -u postgres createdb mydb

psql -w -d mydb -U postgres -c“CREATE TABLE person(first VARCHAR(32),last VARCHAR(32));”

psql -w -d mydb -U postgres -c“CREATE TABLE thing(size VARCHAR(32),price VARCHAR(32));”

退出0;