【问题标题】:How to execute psql interactive in its docker container?如何在其 docker 容器中执行 psql 交互?
【发布时间】:2020-06-01 06:53:16
【问题描述】:

我想在 Postgres 交互式 shell 中运行查询。为此,我使用了一个 docker 容器,如下所示:

这里是 docker-compose 的相关部分:

  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

不过,我正在处理这个错误:

docker exec -it -u 0 db_of_ivms bash

# psql

psql: FATAL:  role "root" does not exist

【问题讨论】:

    标签: django postgresql docker docker-compose psql


    【解决方案1】:

    你需要在 postgres 用户中使用 shell

    docker exec -it -u postgres db_of_ivms bash
    

    现在对于您未指定 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)
    
    

    如果您指定 POSTGRES_USER: ivms_usr 和 Database(注意 psql 命令参数):

    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)
    

    【讨论】:

    • 感谢您的回复。但是,问题仍然存在:/$ psqlpsql: FATAL: role "postgres" does not exist
    • 你可以试试docker exec -it -u ivms_usr db_of_ivms bash
    • unable to find user ivms_usr: no matching entries in passwd file
    【解决方案2】:

    我通过 Django shell 找到了一种替代方法:

    $ python manage.py shell

    from django.db import connection
    
    cursor = connection.cursor()
    cursor.execute("DELETE FROM django_migrations WHERE app='settings'")
    

    【讨论】:

      【解决方案3】:

      我使用这个过程来获取转储:

      docker exec -it -u 0 <container-name> bash
      

      现在,您可以使用 root 权限输入psql 命令:

      # pg_dump -U <user-name> <db-name> > dump.sql
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        相关资源
        最近更新 更多