sql - 在 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 它们会显示正确的值,但是当此命令出于某种原因运行时,用户名将作为数据库名称传递。

知道我可能遗漏了什么吗?

======

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

}

引用自 - https://github.com/mrts/docker-postgresql-multiple-databases/pull/10/files

最佳答案

您需要删除命令中的"

psql -v ON_ERROR_STOP=1 --username $POSTGRES_USER -c "CREATE DATABASE $database;"

关于sql - 在 shell 脚本中使用 psql 创建数据库将用户名作为数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58000907/

相关文章:

java - 仅使用月份的 java.util.Date 类型的 Spring Boot + Spring Data JPA 查询

ruby-on-rails - Rails、PgBouncer 和 DigitalOcean——如何使用数据库连接池?

windows - 批处理文件: List Directory & File names to individual variables and display as selection menu

bash - 用****屏蔽输出卡号

SQL根据条件插入现有表

php - 在 DUPLICATE KEY 错误后获取主键?

sql - SQL中如何使用replace函数更新部分列数据?

postgresql 在 select 语句后从函数返回单行

sql - postgresql 将 0 替换为 "NULL"

linux - 使用 sed 匹配任何内容 and\s