我正在使用PostgreSQL
和sping-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
知道我错过了什么吗?
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);
}
}
如果 Spring 引导
中不存在数据库,则可以创建数据库。至少使用 MySQL,我们做到了:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?createDatabaseIfNotExist=true
所以它应该与PostgreSQL相同:
spring.datasource.url= jdbc:postgresql://localhost:5432/mydb?createDatabaseIfNotExist=true
这不适用于PostgreSQL。
由于所有的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启动时,该目录中的任何桌面条目文件都将被执