sql - 如何在 postgres 容器中运行 shell 脚本以确定数据库是否为空,如果不是则导入备份 SQL 脚本
问题描述
我想将我的项目迁移到 vagrant vm,其中一部分是将数据库数据迁移到 vagrant,我使用 postgres 容器来保存数据,所以我将一个目录/var/lib.postgresql/
和备份 SQL 脚本安装到其中/docker-entrypoint-initdb.d/
以自动加载备份数据和数据坚持。
docker run --name test1 -v /postgresShellTest/:/docker-entrypoint-initdb.d/ -v /postData/:/var/lib/postgresql/ postgres:11.4
但是,这会导致在删除容器后每次创建容器时,备份 SQL 都会删除添加的数据。虽然可以not mount the backup SQL later
,但这不是很方便。所以不知道能不能加上判断,如果项目有表,则不运行备份SQL,否则会初始化数据库。
我挂载了一个shell.sh /docker-entrypoint-initdb.d/
,内容如下
BAK=/var/lib/postgresql/data/
if [ "`ls -A ${BAK}`" = "" ];
then
echo "${BAK} is empty"
psql -h localhost -p 5432 -U postgres -d postgres < edgeai.sql
else
echo "${BAK} is not empty"
fi
因为第一次挂载了一个空文件夹/var/lib/postgresql/data/
,但是这个psql报告:could not connect to server: No such file or directory ....socket "/tmp/.s.PGSQL.5432"?
所以我想psql搜索表
psql -U postgres -d postgres -c 'SELECT * FROM mytable'
但报错psql: FATAL: database "SELECT * FROM my_table" does not exist
我不知道如何实现我的目标
如果你们能告诉我如何实现它,我将不胜感激
解决方案
推荐阅读
- python - 在z3py中使用BitVec数组时如何按数组顺序检索得到的解?
- javascript - 如何在 DOM [no-jQuery] 中尚未包含的元素上添加事件侦听器?
- wordpress - Wordpress:yoast SEO 的问题
- php - 在 PHP 中调用 API GET 请求后没有响应
- python - 来自谷歌云视觉响应nodejs的非最大抑制
- reactjs - 如何在此处定义 proptypes
- r - 由于另一个数据,如何对向量的元素进行排序?
- java - Java - JProgressBar 不会改变值,而 JLabel 不会改变文本
- python - 在 python Django 中从自定义 gsuit 域安全地发送电子邮件
- javascript - node-cron:等待作业完成执行下一个