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

如果运行Spring启动应用程序时不存在,请创建Postgres数据库

马沛
2023-03-14

我正在使用PostgreSQLsping-gett-2.0.1,并希望我的应用程序创建数据库,如果它不存在。我在我的application.properties中有以下选项

spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL94Dialect

spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=postgres
spring.datasource.password=123

在上面我得到了错误:

Caused by: org.postgresql.util.PSQLException: FATAL: database "mydb" does not exist

知道我错过了什么吗?

共有3个答案

祝俊雄
2023-03-14

Spring靴

Postgres不支持create

@SpringBootApplication
public class SpringSecurityJwtApplication{

    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(SpringSecurityJwtApplication.class);
        Connection connection = null;
        Statement statement = null;
        try {
            logger.debug("Creating database if not exist...");
            connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/", "postgres", "postgres");
            statement = connection.createStatement();
            statement.executeQuery("SELECT count(*) FROM pg_database WHERE datname = 'database_name'");
            ResultSet resultSet = statement.getResultSet();
            resultSet.next();
            int count = resultSet.getInt(1);

            if (count <= 0) {
                statement.executeUpdate("CREATE DATABASE database_name");
                logger.debug("Database created.");
            } else {
                logger.debug("Database already exist.");
            }
        } catch (SQLException e) {
            logger.error(e.toString());
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                    logger.debug("Closed Statement.");
                }
                if (connection != null) {
                    logger.debug("Closed Connection.");
                    connection.close();
                }
            } catch (SQLException e) {
                logger.error(e.toString());
            }
        }
        SpringApplication.run(SpringSecurityJwtApplication.class, args);
    }
}

华化
2023-03-14

如果 Spring 引导中不存在数据库,则可以创建数据库。至少使用 MySQL,我们做到了:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?createDatabaseIfNotExist=true

所以它应该与PostgreSQL相同:

spring.datasource.url= jdbc:postgresql://localhost:5432/mydb?createDatabaseIfNotExist=true

这不适用于PostgreSQL。

葛炜
2023-03-14

由于所有的Postgres安装都有一个默认的数据库,从技术上讲,应该可以在最开始的时候(当应用程序启动时)连接到这个数据库,然后调用

创建数据库

这是您可以在Spring初始化之前以编程方式执行的事情,但在读取属性之后,例如在环境后处理器中

之所以需要提前调用,是因为您一方面可能想利用Spring Boot读取的属性,但当Spring Bootbean开始将新创建的数据库置于“操作”状态时。

因此,从技术上讲这是可能的。但是,我看不到这种情况的真实用例。如果是用于测试,那么您可以完美地使用默认的 Postgres 数据库,这在问题一开始就提到过。

如果是在生产环境中——通常DBA不允许这样做,因为为了能够运行< code>CREATE DATABASE语句,连接到Postgres(在本例中是spring boot应用程序)的用户应该拥有非常“强”的createdb特权,这是DBA不愿意共享的。

 类似资料:
  • 问题内容: 有创建数据库的类似物吗? 背景:我正在编写一个脚本,以在未知系统上的PostgreSQL中自动设置架构。我不确定数据库(甚至是架构的一部分)是否已经部署,因此如果某些结构已经存在,我想构建代码以使其不会失败(或者理想情况下甚至显示错误)。我想区分导致我无法创建数据库的错误(因此中止将来的架构更改,因为它们将无法工作)。 问题答案: 否,但是您可以查询pg_catalog.pg_data

  • 我已经尝试了StackOverflow中给出的许多解决方案,比如中的一些更改、更改方言、设置模式等。我检查了数据库权限和用户/密码信息,一切正常。 } 根据我下面的教程,这个设置应该导致在postgres数据库中创建表,但它没有发生。

  • 我是postgreSQL的新手,我正在尝试创建一个模式文件,其中包含创建数据库和所需表所需的所有脚本。我过去为SQl服务器执行此操作的方式是检查数据库是否存在,然后运行必要的脚本。 postgreSQL中的以下脚本引发了一个错误:“无法从函数或多命令字符串执行创建数据库” 我通过导出数据库的备份创建了一个postgres数据库转储文件,但其中包含, 这意味着每次运行模式文件时,数据库都会被删除并重

  • 当我尝试运行spring boot应用程序时,我遇到了以下异常: 组织。springframework。豆。工厂BeanCreationException:创建名为“configurationPropertiesBeans”的bean时出错,该bean在类路径资源[org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebi

  • 是否有用于创建数据库的模拟? 背景:我正在编写一个脚本来在未知系统上自动设置PostgreSQL中的模式。我不确定数据库(甚至是模式的一部分)是否已经部署,所以如果某些结构已经存在,我想将我的代码结构为不会失败(或者理想情况下甚至显示错误)。我想将阻止我创建数据库的错误(因此中止未来的模式更改,因为它们不起作用)与此错误区分开来。

  • 问题内容: 我写了一个Qt应用程序,它将在Linux上运行。它应该在启动时运行。 它应该在每个Linux- Suse,RedHat等上运行。 我应该写什么脚本,放在哪里? 我根本不知道如何编写脚本,因此,如果您附上示例,我将不胜感激。 问题答案: 您需要为您的应用程序创建一个桌面入口文件(请参阅此处),并将其放置在用户目录中。 Window Manager启动时,该目录中的任何桌面条目文件都将被执