Docker & PostgreSQL:初始化期间无法创建数据库名称中包含“-”的数据库

Posted

技术标签:

【中文标题】Docker & PostgreSQL:初始化期间无法创建数据库名称中包含“-”的数据库【英文标题】:Docker & PostgreSQL : can not create database having '-' in database name during initialization 【发布时间】:2016-02-24 10:09:43 【问题描述】:

我已经在 docker 镜像中安装了 PostgreSQL 9.4.6,docker 版本为 1.10.1。根据这张官方图片: https://github.com/docker-library/postgres/blob/443c7947d548b1c607e06f7a75ca475de7ff3284/9.4/Dockerfile 正如这里所说,为了创建初始数据库,我在“/docker-entrypoint-initdb.d”中添加了我的 sql 脚本。 https://hub.docker.com/_/postgres/ 现在遇到一些麻烦后,我发现当我在数据库名称具有 '-' 的 sql 脚本中添加查询以创建数据库时,它们只会导致容器崩溃(即容器在启动后立即退出)。 但是在数据库名称中没有“-”的查询工作正常,容器也不会崩溃,我可以访问这些数据库。 例如,此查询运行良好。

create database 1stName_2ndName with owner vagrant;

但我分别尝试了这两个查询,但两种情况都失败了

create database '1stName-2ndName' with owner vagrant;

create database 1stName-2ndName with owner vagrant;

注意:考虑不带双引号的查询。 vagrant 用户已经创建并且工作正常。

我有一个名为 1stName-2ndName 的数据库。谁能帮我解决这个问题?

【问题讨论】:

当我在 sql 文件中添加 sql 查询时......数据库名称有“-”(连字符)......docker 容器在启动后立即退出。但是,当我从 sql 文件中的数据库名称中删除“-”(连字符)时,容器运行正常,我可以使用 docker exec 访问和查看容器内的数据库。实际上最后两个查询是相同的。我的意思是..我尝试了两种方式。我将尝试使用 " 和 `` 转义数据库名称并让您知道。 【参考方案1】:

在我的本地 Postgres 安装中,以下查询可以正常工作:

create database "1stName-2ndName" with owner vagrant;

【讨论】:

以上是关于Docker & PostgreSQL:初始化期间无法创建数据库名称中包含“-”的数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 docker 中为 postgresql 创建 postgis 扩展?

如何在docker中为postgresql创建postgis扩展?

postgresql初体验

DBA+分享预告PostgreSQL数据库初体验

Hibetnate+postgresql 初体验及demo

Dockerfile 和 Docker Compose 与 Java Spring Boot、Gradle 和 PostgreSQL [重复]