createuser
permite a criação de um usuário (ROLE) no PostgreSQL. Existe uma maneira simples de verificar se esse usuário (nome) já existe? Caso contrário, createuser retornará com um erro:
createuser: creation of new role failed: ERROR: role "USR_NAME" already exists
ATUALIZAÇÃO: A solução deve ser executável do shell de preferência, para que seja mais fácil automatizar dentro de um script.
postgresql
shell
user-management
m33lky
fonte
fonte
psql
é o comando. Mas se você está falando sobrecreateuser
utilitário de linha de comando (obviamente, sim, não percebi a falta de espaçocreate user
no início), então pode ser mais fácil simplesmente ignorar o status de saída e redirecionar a saída para/dev/null
.psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='USR_NAME'"
. Rende1
se for encontrado e nada mais.echo "SELECT rolname FROM pg_roles WHERE rolname='USR_NAME';" | psql | grep -c USR_NAME
. Adicione sua solução como uma resposta sem "postgres" após o psql.Seguindo a mesma ideia que verificar se existe um banco de dados
e você pode usá-lo em um script como este:
fonte
pg_roles
, mas não a uma mudança para o comando\du
. O que provavelmente não mudará?Espero que isso ajude aqueles de vocês que podem estar fazendo isso em python .
Eu criei um script / solução de trabalho completo em um GitHubGist - veja a URL abaixo deste trecho de código.
Fornece função / usuário de criação de PostgreSQL remoto idempotente (RDS) a partir de python sem módulos CM, etc.
fonte
psql -qtA -c "\du USR_NAME" | cut -d "|" -f 1
[[ -n $(psql -qtA -c "\du ${1}" | cut -d "|" -f 1) ]] && echo "exists" || echo "does not exist"
fonte