如何在 azure 管道中创建 postgres 数据库?

问题描述

我在 azure 管道中使用 windows-latest 主机代理来构建和打包我的 maven spring boot Java 项目。作为 Maven 构建的一部分,它针对包含在窗口主机代理上的 postgres 数据库运行测试。但是,如何在 postgres 服务器中创建数据库

我可以通过将 spring 数据源 URL、用户名密码指定为系统属性来连接到数据库,这工作正常(否则控制台日志中会显示无法连接的错误)。

我可以使用包含 sql文件 schema.sql 来执行在应用程序启动期间由 Spring 运行的数据库初始化。但是,Postgres 没有认的“如果不存在则创建数据库”。 因此,我尝试使用 psql 在脚本中创建数据库。我在 SO 上找到了以下命令来创建数据库并尝试在脚本中运行它:

        - script: |
            "C:\Program Files\Postgresql\13\bin\psql" -c "CREATE DATABASE default" "user=postgres dbname=postgres password=root"
          displayName: Creating DB

但是,它会导致控制台日志中出现以下错误

ERROR:  Syntax error at or near "default"
LINE 1: CREATE DATABASE default
                        ^
##[error]Cmd.exe exited with code '1'.
Finishing: Creating DB

请就数据库的创建提供一些建议?还有上面的错误

maven 任务:

        - task: Maven@3
          name: maven_package
          displayName: Maven package
          inputs:
              goals: "package"
              mavenPomFile: "backend/pom.xml"
              options: '--settings backend/.mvn/settings.xml -DmygetUsername=$(mygetUsername) -Dmygetpassword=$(mygetpassword) -Dspring.datasource.url=jdbc:postgresql://localhost:5432/default  -Dspring.datasource.username=postgres -Dspring.datasource.password=root'
              mavenoptions: "-Xmx3072m $(MAVEN_OPTS)"
              javaHomeOption: "JDKVersion"
              jdkVersionoption: "1.13"
              mavenAuthenticateFeed: true

解决方法

我已重现您的问题:

enter image description here

此错误的原因是您无法创建名为 default 的数据库。 default 是 Postgre 中的保留字。您可以单击 this document 查看 SQL 关键字列表以及它们是否在 PostgresSQL 中保留。