es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿La aplicación de psql no funciona correctamente? (Utilizando el contenedor de Postgres Alpine en Docker)

Quiero crear un comando para otorgar a un usuario en un contenedor de ejecución de Postgresql ciertos privilegios desde la línea de comandos, sin tener que acceder manualmente a psql dentro del contenedor.
Para hacer esto, puedes utilizar los comandos de la aplicación, aquí está la documentación: https://www.postgresql.org/docs/8.1/app-psql.html
(Ya he utilizado otros comandos de la aplicación con éxito, por ejemplo, para crear bases de datos con “docker exec -it samplePostgres createdb –username=root –owner=root –encoding=UTF8 sampleDB”)

Sin embargo, al usar:

docker exec -it samplePSQL psql -d sampleDB -c GRANT SELECT, INSERT, UPDATE ON table TO user;

Se muestra el siguiente resultado:

jj
psql: advertencia: se ignoró el argumento adicional de línea de comandos “INSERT,”
psql: advertencia: se ignoró el argumento adicional de línea de comandos “UPDATE”
psql: advertencia: se ignoró el argumento adicional de línea de comandos “ON”
psql: advertencia: se ignoró el argumento adicional de línea de comandos “table”
psql: advertencia: se ignoró el argumento adicional de línea de comandos “TO”
psql: advertencia: se ignoró el argumento adicional de línea de comandos “user”
psql: error: falló la conexión al servidor en el socket “/var/run/postgresql/.s.PGSQL.5432”:
FATAL: el rol “SELECT,” no existe

¿Considera de alguna manera que “SELECT” es el usuario??

Por supuesto, correrlo desde psql dentro del contenedor funciona normalmente.

sampleDB=# GRANT SELECT, INSERT, UPDATE ON table TO user;

GRANT

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para otorgarle a un usuario en un contenedor en ejecución de Postgresql ciertos privilegios desde la línea de comandos sin acceder manualmente a psql dentro del contenedor, use el siguiente comando:

    docker exec -it samplePSQL psql -d sampleDB -c "GRANT SELECT, INSERT, UPDATE ON table TO user;"
    

    El problema con el comando anterior era que los argumentos no estaban correctamente encerrados entre comillas. Esto hacía que psql interpretara “SELECT” como el nombre de un rol, en lugar de un comando. Al rodear todo el comando con comillas, los argumentos se analizan y ejecutan correctamente.

Comments are closed.