如何检查postgres用户是否存在?

m33*_*lky 82 postgresql shell user-management

createuser允许在PostgreSQL中创建用户(ROLE).有没有一种简单的方法来检查该用户(名称)是否已经存在?否则createuser返回错误:

createuser: creation of new role failed: ERROR:  role "USR_NAME" already exists
Run Code Online (Sandbox Code Playgroud)

更新:解决方案应该可以从shell执行,因此在脚本内部更容易自动化.

Mic*_*ker 142

SELECT 1 FROM pg_roles WHERE rolname='USR_NAME'
Run Code Online (Sandbox Code Playgroud)

在命令行方面(感谢Erwin):

psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='USR_NAME'"
Run Code Online (Sandbox Code Playgroud)

如果找到则产生1,没有别的.

那是:

psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='USR_NAME'" | grep -q 1 || createuser ...
Run Code Online (Sandbox Code Playgroud)

  • @ m33lky:或者你可以在shell中测试这个命令的返回值(作为postgres用户):`psql postgres -tAc"SELECT 1 FROM pg_roles WHERE rolname ='USR_NAME'"`.如果找到则产生"1"而没有别的. (2认同)
  • @ m33lky:我只写了一条评论,因为我觉得迈克尔值得赞扬.他贡献了主要部分.而且他在过去被证明是一项很好的运动.:)也许迈克尔想把它纳入他的答案? (2认同)

mat*_*att 8

遵循相同的想法而不是检查数据库是否存在

psql -t -c '\du' | cut -d \| -f 1 | grep -qw <user_to_check>
Run Code Online (Sandbox Code Playgroud)

你可以在这样的脚本中使用它:

if psql -t -c '\du' | cut -d \| -f 1 | grep -qw <user_to_check>; then
    # user exists
    # $? is 0
else
    # ruh-roh
    # $? is 1
fi
Run Code Online (Sandbox Code Playgroud)