gpt4 book ai didi

bash - 如何使用 shell 脚本判断 postgres 数据库表是否存在

转载 作者:行者123 更新时间:2023-12-05 07:10:53 27 4
gpt4 key购买 nike

我需要用entrypoint来判断数据库是否可用,表是否存在。

我使用以下 shell 来确定表是否存在

部分dockerfile内容

ENTRYPOINT ["bash","docker-entrypoint.sh"] 

Shell脚本内容

until PGPASSWORD=postgres psql -h "db" -U "postgres" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done

# Prepare variables
TABLE=web_user
SQL_EXISTS=$(printf '\dt "%s"' "$TABLE")

# Credentials
USERNAME=postgres
PASSWORD=postgres
DATABASE=postgres

echo "Checking if table <$TABLE> exists ..."

# Check if table exists
PGPASSWORD="$PASSWORD" psql -h "db" -U $USERNAME -d $DATABASE -c "$SQL_EXISTS"
# using #!/bin/bash
if [[ $(PGPASSWORD="$PASSWORD" psql -h "db" -U $USERNAME -d $DATABASE -c "$SQL_EXISTS") ]]
then
echo "Table exists ..."

else
echo "Table not exists ..., init database"
python3 manage.py makemigrations web
python3 manage.py migrate
fi

db is the service name of the postgres container in compose

我想要的是容器第一次启动,判断user表不存在,然后新建一个数据库,然后重启容器,发现user表已经存在无需创建新的数据表

但是当我在 Ubuntu16.04 基础镜像上使用它时,它只是输出 table exists... 容器第一次启动

psql: FATAL:  the database system is starting up
Postgres is unavailable - sleeping
Checking if table <web_user> exists ...
No matching relations found.
Table exists ...

但我期望的是打印table not exists..., the init database 和后续命令

使用python alpine基础镜像的输出如下

Checking if table <web_user> exists ...
Did not find any relation named ""web_user"".
Table not exists ..., init database
Migrations for 'web':

区别如下:
没有找到匹配关系。是基于ubuntu镜像的输出,
根据 python:3.6.9-alpine image

的输出,未找到任何名为“web_user”的关系。

为什么不是 else 部分呢?

如果你能告诉我为什么会出现这个错误以及如何解决它,我将不胜感激?

最佳答案

我的猜测是 if 语句为真,因为您已成功连接到数据库(并且与该连接是否找到字符串无关)

像这样试试:

if [[ $(PGPASSWORD="$PASSWORD" psql -h "db" -U $USERNAME -d $DATABASE) ]]
then
echo connection successful
echo basing your previous if on:
echo $(PGPASSWORD="$PASSWORD" psql -h "db" -U $USERNAME -d $DATABASE -c "$SQL_EXISTS")
fi

关于bash - 如何使用 shell 脚本判断 postgres 数据库表是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61060674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com