当前位置: 首页 > 知识库问答 >
问题:

如何在TestContainers中创建数据库?

陆宇航
2023-03-14
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>postgresql</artifactId>
    <version>1.5.1</version>
    <scope>test</scope>
</dependency>
@ClassRule
public static PostgreSQLContainer postgres = new PostgreSQLContainer()
    .withDatabaseName("user")
    .withUsername("postgres")
    .withPassword("postgres");
PSQLException: FATAL: database "user" does not exist

在此容器中只存在默认DB“postgres”

如何创建数据库“user”

共有1个答案

东门秦迟
2023-03-14

问题是因为容器返回的JDBC_URL带有随机端口,而默认端口是可访问的默认Postgres DB,但需要一个是在随机端口上

这是解决办法

@ClassRule
public static DockerComposeContainer environment =
    new DockerComposeContainer(new File("src/test/resources/docker-compose-postgres.yml"))
        .withExposedService("postgres-it", 5432);

这是docker-compose YML:

version: "2"
    services:
    postgres-it:
        image: postgres
        ports:
            - 5432:5432
        hostname: postgres-it
        environment:
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: postgres
            POSTGRES_DB: user
 类似资料:
  • testcontainers oracleContainer在Dokerfile中定义的entrypoint发生更改之前启动,以完成并创建测试所需的用户。 容器运行后,将执行一些sql脚本创建表并用数据填充表。这些脚本失败,因为脚本中提到的用户尚未创建。 testcontainers没有等待完成安装。 通过使用以下命令检查日志: 我可以看到testcontainers从不等待它完成。 关于这个“b

  • 问题内容: 我是一个redis初学者。我正在学习将其用于在轨道上的红宝石。 Redis支持很多分贝(最多可以支持30个)。正常访问我运行的客户端Redis控制台 在终端。默认情况下,它会自动进入db0。如果它有多个db,则可以使用命令选择要访问的db。 但是我不知道创建一个数据库使用的任何方法。 你能帮助我吗。非常感谢。! 问题答案: 无需在Redis中创建一个数据库,只需使用它即可。您还可以通过

  • 安装oracle 19C后,它要求用户名和密码。输入什么,以及如何创建一个具有所有权限和身份验证权限的新用户。(注意,我试图通过登录SYSDBA创建用户命令,但它显示错误为无效的普通用户或角色名.在这里输入图像描述 [在此处输入图像描述][2]

  • 我在控制台中看到正确的changelog弹出,但在我的changelogs文件夹下没有创建changelog。我做错了什么?

  • 问题内容: 我正在使用Hibernate租约,并且每次用户登录时,我都将数据库更改为其用户名(SQLite)。可悲的是,有时数据库不存在,我需要创建它。 问题是我不知道如何在运行时在数据库中创建所有表。 通常,Hibernete为此创建数据库: 问题答案: 创建数据库之后,可以为此使用SchemaExport导出要在新创建的数据库中创建的实体。基本步骤如下。如何获取配置的属性并不重要。 Javad

  • 问题内容: 我想在Oracle数据库中创建一个临时表 就像是 在SQL Server中 然后用选择语句填充它 是否有可能? 谢谢 问题答案: 是的,Oracle有临时表。这是描述它们的AskTom文章的链接,这是oracle的官方CREATE TABLE文档。 但是,在Oracle中,只有临时表中的 数据 是临时的。该表是其他会话可见的常规对象。在Oracle中频繁创建和删除临时表是一种不好的做法