我用postgres和管理员创建了带有选项的docker容器
lprods_db:
image: postgres:9.6.10-alpine
ports:
- '5433:5432'
restart: always
environment:
POSTGRES_USER: 'postgres'
POSTGRES_PASSWORD: '1'
POSTGRES_DB: 'wprods'
volumes:
- ./init:/docker-entrypoint-initdb.d/
lprods_adminer:
image: adminer
restart: always
ports:
- 8083:8080
links:
- lprods_db
我需要将转储上传到lprods_db实例的wprods数据库中 我在操作系统的控制台中运行:
cat /mnt/_work_sdb8/wwwroot/lar/lprods/__SQL/wprods_2017_10_23.sql | docker exec -i lprods_docker_lprods_db_1 psql -Upostgres
其中 /mnt/_work_sdb8/wwwroot/lar/lprods/__SQL/wprods_2017_10_23.sql是我的OS路径中的sql dump 和 lprods_docker_lprods_db_1-数据库容器
我看到了很长的postgres导入命令的输出,没有错误,例如:
CREATE INDEX
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
REVOKE
REVOKE
GRANT
GRANT
通过在http://127.0.0.1:8083/打开管理员,我没有在指定的db中找到任何表:https://imgur.com/a/n6Tk4YE 我希望我的数据将被导入到wprods.public。是这样吗? 怎么了?
这里可以使用一些FLUSH命令吗?
谢谢!
答案 0 :(得分:5)
您的docker-compose.yml
和您使用的命令似乎完全正确-我首先尝试了一切。
这里唯一的陷阱是pg_dump
的输出对数据库名称一无所知。来自docs:
脚本转储是包含SQL命令的纯文本文件 重建数据库所需的
因此,当您通过psql
还原它时,您需要明确指定目标数据库名称,在这种情况下,命令看起来像
cat /mnt/_work_sdb8/wwwroot/lar/lprods/__SQL/wprods_2017_10_23.sql | docker exec -i lprods_docker_lprods_db_1 psql -Upostgres wprods
否则,您将填充默认的postgres
数据库