Соединение Postgres JDBC как пользователь приложения, а не системный пользователь - PullRequest
0 голосов
/ 24 августа 2018

Я использую flyway для переноса моей интеграционной тестовой базы данных как части моей сборки maven.

У меня есть пролетный путь, настроенный для запуска во время фазы pre-integration-test. Он очищает, а затем перестраивает БД каждый раз.

<build>
  <plugins>

    <!-- Flyway -->
    <plugin>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
      <version>5.1.4</version>

      <configuration>
        <url>${jdbc.url}</url>
        <schemas>
          <schema>public</schema>
        </schemas>
      </configuration>
      <executions>
        <execution>
          <id>migrate-database</id>
          <phase>pre-integration-test</phase>
          <goals>
            <goal>clean</goal>
            <goal>migrate</goal>
          </goals>
        </execution>
      </executions>
    </plugin>

  </plugins>
</build>

Я запускаю сборку с mvn clean install, передавая ей URL JDBC для тестовой БД. Как видите, он подключается к racer_test как пользователь postgres racer

mvn -Djdbc.url=jdbc:postgresql://localhost:5432/racer_test?user%3Dracer%26password%3Dfoo clean install

Все работает нормально во время сборки

[INFO] --- flyway-maven-plugin:5.1.4:clean (migrate-database) @ racer-api ---
[INFO] Flyway Community Edition 5.1.4 by Boxfuse
[INFO] Database: jdbc:postgresql://localhost:5432/racer_test (PostgreSQL 9.6)
[INFO] Successfully cleaned schema "public" (execution time 00:00.026s)
[INFO]
[INFO] --- flyway-maven-plugin:5.1.4:migrate (migrate-database) @ racer-api ---
[INFO] Database: jdbc:postgresql://localhost:5432/racer_test (PostgreSQL 9.6)
[INFO] Successfully validated 1 migration (execution time 00:00.005s)
[INFO] Creating Schema History table: "public"."flyway_schema_history"
[INFO] Current version of schema "public": << Empty Schema >>
[INFO] Migrating schema "public" to version 1 - create users
[INFO] Successfully applied 1 migration to schema "public" (execution time 00:00.040s)

Однако, когда я смотрю на базу данных в postgres, она создала таблицы и другие объекты как мой системный пользователь, для которого я вошел как (jeeves), а не как пользователь, которого я указал (racer)

racer_test=> \d
                  List of relations
 Schema |         Name          |   Type   | Owner
--------+-----------------------+----------+--------
 public | flyway_schema_history | table    | jeeves
 public | users                 | table    | jeeves
 public | users_id_seq          | sequence | jeeves
(3 rows)

Не правильно ли я как-то указал пользователя? Разве это не должно быть частью URL JDBC?

Спасибо!

1 Ответ

0 голосов
/ 24 августа 2018

Для этого вы должны использовать пользовательский параметр flyway: просто добавьте -Dflyway.user=racer к вашей команде maven, которая должна работать правильно! Если вы используете файл flyway.properties, просто добавьте к нему flyway.user=racer.

Кроме того, при использовании URL-адреса пользователи с postgres должны быть настроены следующим образом:

jdbc:postgresql://{$user}:{$optional_password}@{$host}:{$port}/{$db_name}{$GET_parameters}

...