在shell脚本中使用psql创建数据库以用户名作为数据库名
下面是我用来在shell脚本中创建数据库的命令在shell脚本中使用psql创建数据库以用户名作为数据库名,sql,postgresql,shell,psql,Sql,Postgresql,Shell,Psql,下面是我用来在shell脚本中创建数据库的命令 psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" \ -c "CREATE DATABASE $database;" 它抛出错误 FATAL: database "POSTGRES_USER" does not exist 如果我打印$database和$POSTGRES_USER,它们会显示正确的值,但是当这个命令由于某种原因运行时,用户名会作为数据库名传递 有什
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" \
-c "CREATE DATABASE $database;"
它抛出错误
FATAL: database "POSTGRES_USER" does not exist
如果我打印$database和$POSTGRES_USER,它们会显示正确的值,但是当这个命令由于某种原因运行时,用户名会作为数据库名传递
有什么线索我可能遗漏了什么吗
======
function create_db() {
local database=$1
local query_databases="select datname from pg_database;"
local databases=$(echo "$query_databases" | psql -Aqt)
//this do not return any database but I have one db
database_exist=$(containsElement "$databases" "$database")
echo $database_exist;
if [[ "$database_exist" == 1 ]]; then
echo "Database '$database' exists. Skipping."
else
echo "Create Database '$database'"
psql -v ON_ERROR_STOP=1 --username=$POSTGRES_USER \
-c "CREATE DATABASE $database;"
fi
}
从-引用时,需要删除命令中的
“
psql-v ON_ERROR_STOP=1——用户名$POSTGRES_USER-c“创建数据库$DATABASE;“
您没有正确使用。使用长格式选项时,您需要在选项及其值之间使用=
符号。此外,不需要双引号。”
考虑:
psql -v ON_ERROR_STOP=1 --username=$POSTGRES_USER \
-c "CREATE DATABASE $database;"
这是默认设置。如果您不提供数据库名称,postgres将使用用户名作为数据库名称。因此:您应该在命令行上提供数据库名称。(
postgres
,或template1
)@wildplasser我应该提供不存在的数据库名称吗?您应该提供存在的数据库名称。(postgres
和template1
(几乎)总是存在)解决了这个问题。我仍然收到相同的错误,我在问题中更新了我的函数定义。我仍然收到相同的错误,我在问题中更新了我的函数定义。