关于sql server:如何编写bash和sql文件来为postgres设置用户?

How to write bash & sql files to setup users for postgres?

我正在尝试创建bash和sql文件来创建用户和数据库..

这是我到目前为止所做的......

Setup_postgres.sql

1
2
3
4
Create USER dummbyuser;
 ALTER USER dummbyuser with superuser;
 ALTER USER dummbyuser with LOGIN;
/q

Setup_postgres.sh

1
2
3
4
sudo su - postgress
psql -f setup_postgres.sql;
sh setup_postgres.sql
logout

我的问题[求助]

我告诉bash运行Setup_postgres.sh然后它挂起后
sudo su - postgres line setup_postgres.sql根本不运行。

任何人对我做错了什么都有任何想法?
这是正确的方法吗?
我写bash文件的经验很少。

是否有可能脚本提示用户输入"dummbyuser"的名称


您正在使用sudo su - postgres为postgres用户启动新的登录shell。退出该shell后,其余的脚本将运行,但不会使用postgres用户权限。

您可以像这样修改脚本以使其正常工作:

1
2
3
#!/bin/bash

sudo -iu postgres psql < setup_postgres.sql

这将使用postgres用户权限运行指定的psql命令。


此外,您不需要sudo over psql,您只需运行psql -U psql < setup_postgresql.sql,因为默认情况下是信任传递的用户名。如果没有通过,它将使用它运行的帐户名称。

或者你可以做这样的事情。

1
2
3
#!/bin/bash
createuser -U psql -s dummbyuser
createdb -U psql -O dummbyuser dummbyuser

甚至在这里使用shell文档

1
2
3
4
5
psql -U psql <<EOF
 Create USER dummbyuser;
 ALTER USER dummbyuser with superuser;
 ALTER USER dummbyuser with LOGIN;
 EOF

---回答评论中的问题---

您可以使用位置参数,例如$1$2

所以,例如,如果您的脚本被称为build_sql.sh,您可以这样做

1
2
3
#!/bin/bash
createuser -U psql -s $1
createdb -U psql -O $1 $2

然后将其称为./build_sql.sh dummbyuser dummbybd

这将用dummbyuser替换$1,用dummbydb替换$2

或者您可以提示用户输入并使用read命令捕获它

所以相同的build_sql.sh脚本可能会成为

1
2
3
4
5
6
7
#!/bin/bash
echo"please enter username followed by [enter]"
read user
echo"please enter db_name followed by [enter]"
read dbname
createuser -U psql -s $user
createdb -U psql -O $user $dbname

然后,如果你想要真正的幻想,你可以结合它们

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
if ["$1" !="" ]; then
      user=$1
else
  echo"please enter username followed by [enter]"
  read user
fi
if ["$2" !="" ]; then
  dbname=$2
else
  echo"please enter db_name followed by [enter]"
  read dbname
fi

 createuser -U psql -s $user
 createdb -U psql -O $user $dbname  

 echo"created new user $user, and gave them a db called $dbname"