Je souhaite exécuter une requête dans le shell interactif Postgres. J'utilise un conteneur Docker à cette fin comme suit:
Voici le morceau pertinent de docker-compose:
# psql psql: FATAL: role "root" does not exist
Néanmoins, je suis confronté à cette erreur:
docker exec -it -u 0 db_of_ivms bash
db_of_ivms: image: postgres:10 restart: unless-stopped ports: - 5432:5432 container_name: db_of_ivms environment: POSTGRES_PASSWORD: xxx POSTGRES_USER: ivms_usr POSTGRES_DB: ivms_db
3 Réponses :
Vous avez besoin de shell avec l'utilisateur postgres
docker exec -it -u postgres db_of_ivms bash postgres@2cec2435bb83:/$ psql -U ivms_usr -d ivms_db psql (10.12 (Debian 10.12-1.pgdg90+1)) Type "help" for help. ivms_db=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- ivms_db | ivms_usr | UTF8 | en_US.utf8 | en_US.utf8 | postgres | ivms_usr | UTF8 | en_US.utf8 | en_US.utf8 | template0 | ivms_usr | UTF8 | en_US.utf8 | en_US.utf8 | =c/ivms_usr + | | | | | ivms_usr=CTc/ivms_usr template1 | ivms_usr | UTF8 | en_US.utf8 | en_US.utf8 | =c/ivms_usr + | | | | | ivms_usr=CTc/ivms_usr (4 rows)
Maintenant, pour les conteneurs que vous ne spécifiez pas POSTGRES_USER: ivms_usr
:
postgres@d9b097b8db8c:/$ psql postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows)
Si vous spécifiez POSTGRES_USER: ivms_usr
et Database (notez les arguments de la commande psql):
docker exec -it -u postgres db_of_ivms bash
Merci pour la réponse. Cependant, le problème persiste: /$ psql
: psql: FATAL: role "postgres" does not exist
pourriez-vous s'il vous plaît essayer avec docker exec -it -u ivms_usr db_of_ivms bash
unable to find user ivms_usr: no matching entries in passwd file
J'ai trouvé une approche alternative via le shell Django:
$ python manage.py shell
from django.db import connection cursor = connection.cursor() cursor.execute("DELETE FROM django_migrations WHERE app='settings'")
J'utilise cette procédure par exemple pour obtenir un vidage:
# pg_dump -U <user-name> <db-name> > dump.sql
Maintenant, vous pouvez entrer des commandes psql
avec l'autorisation root:
docker exec -it -u 0 <container-name> bash