#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. Ооо, спасибо, я этого не ожидал, поэтому смотрел не в ту сторону.. Спасибо