PostgreSQL ‘数据库不存在’ - Java Spring Boot、Flyway、Docker/PostgreSQL

Posted

技术标签:

【中文标题】PostgreSQL ‘数据库不存在’ - Java Spring Boot、Flyway、Docker/PostgreSQL【英文标题】:PostgreSQL ‘database does not exist’ - Java Spring Boot, Flyway, Docker/PostgreSQL 【发布时间】:2020-08-28 18:16:02 【问题描述】:

我正在关注这个教程:https://www.youtube.com/watch?v=vtPkZShrvXQ

…我在数据库迁移方面遇到了麻烦。我使用的是 Spring Boot 2.2.7,并创建了一个名为“demodb”的 PostgreSQL 数据库

当我运行程序时,控制台报错:

org.postgresql.util.PSQLException: FATAL: 数据库“demodb”不存在

这是我的 application.yml 文件,其中包含数据库信息:



app:
  datasource:
    plaltform: postgres
    jdbc-url: jdbc:postgresql://localhost:5432/demodb
    username: postgres
    password: password
    pool-size: 30

这是我在 pom.xml 文件中的依赖项:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>3.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
        <version>2.2.7.RELEASE</version>
    </dependency>

</dependencies>

我在一个单独的文件夹中运行我的迁移,就像我说的,数据库“demodb”确实存在(我从终端创建了它),所以我不确定我为什么会收到这个错误。有什么想法吗?

【问题讨论】:

【参考方案1】:

所以我按照相同的教程进行操作。然后我切换到同一个人关于安装 postgres 的视频:https://youtu.be/4smnWU0BhrA?t=811

在我链接您的时间戳时,您最终会在 mac 应用程序中启动 postgres。确保你停止它。对我来说的问题是,自从我在 docker 内部启动 postgres 之前,原来的 postgres 正在侦听端口 5432。而原来的 postgres 没有 demodb。

如果这不是解决方案,请尝试杀死正在侦听端口 5432 的任何内容,然后重试或重新启动 docker 实例。

lsof -i :5432

获取 PID,假设它是 1001,然后执行以下操作: kill -9 1001

【讨论】:

非常感谢。我还运行了两个 Postgres,它试图连接到我的本地与 docker 中的一个。杀死本地人解决了我的问题。【参考方案2】:

可能与您的 application.yml 文件中的拼写错误有关...

app:
  datasource:
    platform: postgres

(你写的plaltform

除此之外,我想知道您为什么不使用默认的 Spring Boot 属性来配置您的数据库连接:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: dbc:postgresql://localhost:5432/demodb
    username: postgres
    password: password

还请查看 Spring Boot 属性的参考:https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#data-properties

【讨论】:

谢谢 - 我修复了这个问题,但我仍然收到错误。

以上是关于PostgreSQL ‘数据库不存在’ - Java Spring Boot、Flyway、Docker/PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSql INSERT 插入数据判断数据是否存在,存在则更新,不存在则插入

PostgreSql INSERT 插入数据判断数据是否存在,存在则更新,不存在则插入

表中不存在键,但它是 | Postgresql, timescaledb

简单的 Postgresql 语句 - 列名不存在

PostgreSQL“列“foo”不存在”,其中 foo 是值

jfinal显示postgresql数据库不存在