与 Postgresql 相比,H2 数据库有何不同? H2在微服务中使用时是否自行创建表

How is H2 database different compared to Postgresql? Does H2 create tables on its own when used in a microservice

我是编程新手,我正在尝试读取 json 并使用 springboot 存储在数据库中,当我使用 H2 时,我不必创建它创建的 table 结构它自己但是当我使用 postgres 时我得到无法找到 table 的错误。有没有办法在 postgres 中自动创建 tables?

它们是如何工作的,postgres 无法自行创建 table,我做错了什么吗?`

 spring.datasource.url=jdbc:h2:mem:testdb
 spring.datasource.driverClassName=org.h2.Driver
 spring.datasource.username=sa
 spring.datasource.password=
 spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
 spring.h2.console.enabled=true

spring.datasource.initialization-mode=always
spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/MyDB
spring.datasource.username=postgres
spring.datasource.password=1234
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

您需要设置 属性 让 PostgreSQL 在启动时自动创建表:

spring.jpa.hibernate.ddl-auto=update

或者如果您想每次都从一个干净的数据库开始:

spring.jpa.hibernate.ddl-auto=create

对于像 H2 这样的嵌入式数据库,Spring 引导将自动设置 spring.jpa.hibernate.ddl-auto=create

另请参阅这个 12 年前的问题,了解为什么您不应该在生产中这样做: Hibernate: hbm2ddl.auto=update in production?

在生产中,您应该在应用程序之外管理数据库表,或者使用类似 Liquibase 或 Flyway 的东西

如果数据库是嵌入的,spring.jpa.hibernate.ddl-auto 的默认值是create-drop。如果不是,默认值为 none。 检查一下 - https://docs.spring.io/spring-boot/docs/1.1.0.M1/reference/html/howto-database-initialization.html