1

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

!/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)。

4

3 回答 3

3

一种方法是使用 a 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选项。

于 2012-10-16T05:29:18.933 回答
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 选项运行所有查询。

于 2012-10-16T12:05:25.267 回答
1

在将 hba_conf 文件编辑为“本地所有 postgres 信任”后(我使用了信任,因此我不必为我的脚本提供密码),我使用了 TraviJuu 的建议,现在我的脚本可以完美运行。这是最终结果的样子。

!/bin/sh

sudo -u postgres createdb mydb

psql -w -d mydb -U postgres -c "创建表人(第一个 VARCHAR(32),最后一个 VARCHAR(32));"

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

退出0;

于 2012-10-17T00:56:11.893 回答