如何从宿主机在Docker容器内执行PostgreSQL命令?
在Docker容器中执行PostgreSQL命令的问题解决
我在Docker容器运行的PostgreSQL里执行命令/查询时遇到问题,之前用MySQL的方法可以正常工作,但PostgreSQL的写法报错。
可行的MySQL命令
# MySQL docker exec $CONTAINER mysql -u$MYSQL_USER -p$PASSWORD -e "USE $DATABASE;"
尝试的PostgreSQL命令(报错)
# PostgreSQL docker exec -i db psql -h localhost -U postgres -d app -e "SELECT * FROM users;"
错误信息
psql: warning: extra command-line argument "SELECT * FROM users;" ignored
解决方法
PostgreSQL的psql工具执行SQL语句需要用-c参数(对应MySQL的-e),而你用的-e参数是用来回显执行的SQL命令的,不是传递要执行的语句的。正确命令如下:
单条SQL语句
docker exec -i db psql -h localhost -U postgres -d app -c "SELECT * FROM users;"
多条SQL语句
如果要执行多条语句,可以把内容写入SQL文件,通过管道传入:
cat your_queries.sql | docker exec -i db psql -h localhost -U postgres -d app
或者直接在-c参数里用分号分隔多条语句:
docker exec -i db psql -h localhost -U postgres -d app -c "SELECT * FROM users; SELECT * FROM orders;"
内容的提问来源于stack exchange,提问作者dokgu
相关产品推荐
相关产品推荐

