我当前的脚本看起来像这样:
!/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)。
答案 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;