在shell脚本中使用psql创建数据库以用户名作为数据库名

在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,它们会显示正确的值,但是当这个命令由于某种原因运行时,用户名会作为数据库名传递 有什

下面是我用来在shell脚本中创建数据库的命令

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
(几乎)总是存在)解决了这个问题。我仍然收到相同的错误,我在问题中更新了我的函数定义。我仍然收到相同的错误,我在问题中更新了我的函数定义。