Как создать базу данных postgres в конвейере azure?

#postgresql #spring-boot #azure-pipelines #azure-pipelines-yaml #azure-pipelines-tasks

Вопрос:

Я использую агент хоста Windows последней версии в своем конвейере azure для создания и упаковки своего Java-проекта maven spring boot. В качестве части сборки Maven он выполняет тесты с базой данных postgres, которая содержится в агенте хоста windows. Однако как создать базу данных на сервере postgres?

Я могу подключиться к БД, указав URL-адрес источника данных spring, имя пользователя и пароль в качестве системных свойств, что работает нормально (в противном случае в журнале консоли отображается ошибка, из-за которой не удается подключиться).

Я могу использовать файл schema.sql, содержащий SQL, для выполнения инициализации бд, запускаемой Spring во время запуска приложения. Однако в Postgres нет по умолчанию «создать базу данных, если она не существует». Таким образом, я попытался использовать psql для создания базы данных в скрипте. Я нашел следующую команду в SO для создания базы данных и попытался запустить ее в скрипте:

         - script: |
            "C:Program FilesPostgreSQL13binpsql" -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
 

Ответ №1:

Я воспроизвел вашу проблему:

введите описание изображения здесь

Причина этой ошибки в том, что вы не можете создать базу данных с именем default . default это зарезервированное слово в Postgre. Вы можете щелкнуть этот документ, чтобы получить список ключевых слов SQL и узнать, зарезервированы ли они в PostgresSQL.

Комментарии:

1. Ооо, спасибо, я этого не ожидал, поэтому смотрел не в ту сторону.. Спасибо