Использование JDBC-драйвера для подключения JVM-приложений к ADB
JDBC (Java Database Connectivity) — это стандартный Java API, позволяющий создавать подключения JVM-приложений к базам данных. Для подключения к ADB можно использовать PostgreSQL JDBC Driver.
Чтобы воспользоваться драйвером, загрузите соответствующий JAR-файл или укажите зависимость, используя систему сборки.
Добавьте зависимость в файл pom.xml:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.10</version>
</dependency>
Добавьте зависимость в файл build.gradle.kts:
dependencies {
implementation("org.postgresql:postgresql:42.7.10")
}
Добавьте зависимость в файл build.gradle:
dependencies {
implementation 'org.postgresql:postgresql:42.7.10'
}
Скачайте JAR-файл драйвера:
$ curl -O https://jdbc.postgresql.org/download/postgresql-42.7.10.jar
Затем добавьте его в переменную CLASSPATH:
$ export CLASSPATH=".:postgresql-42.7.10.jar"
-
Напишите код на Java, в котором параметры подключения к ADB передаются методу
DriverManager.getConnection(). Например, можно написать код, который возвращал бы статистику по сегментам на хосте — имя хоста будет указано пользователем:import java.sql.*; import java.util.Scanner; public class TestApp { public static void main(String[] args) { String url = "jdbc:postgresql://192.0.2.123:5432/adb?user=gpadmin"; try (Scanner scanner = new Scanner(System.in)) { System.out.print("Enter a hostname: "); String hostname = scanner.nextLine(); String sql = """ SELECT COUNT(*) AS total, COUNT(CASE WHEN status = 'u' THEN 1 END) AS up, COUNT(CASE WHEN status = 'd' THEN 1 END) AS down FROM gp_segment_configuration WHERE hostname = ? """; try (Connection conn = DriverManager.getConnection(url); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, hostname); try (ResultSet rs = pstmt.executeQuery()) { if (rs.next()) { int total = rs.getInt("total"); int up = rs.getInt("up"); int down = rs.getInt("down"); System.out.println("\nSegments on host " + hostname); System.out.println("========================================"); System.out.printf("Total number of segments: %d%n", total); System.out.printf(" ✅ Up: %d%n", up); System.out.printf(" ❌ Down: %d%n", down); if (total > 0 && up == total) { System.out.println("\n🎉 Good news! All segments on this host are up"); } } else { System.out.println("No data for host " + hostname); } } } catch (SQLException e) { System.err.println("DB error: " + e.getMessage()); } } } }Этот код устанавливает соединение с хостом мастера ADB от имени пользователя
gpadminбез пароля и выполняет на нем запрос к таблицеgp_segment_configuration.ПРИМЕЧАНИЕУбедитесь, что мастер принимает соединения с хоста, на котором вы собираетесь запускать код. При необходимости добавьте IP-адрес клиентского хоста в файл pg_hba.conf, как описано в разделе Удаленное подключение.
-
Скомпилируйте и запустите проект. Будет предложено ввести имя хоста (
Enter a hostname). -
Введите имя хоста, статистику по сегментам с которого требуется показать. Если соединение установлено успешно и имя хоста указано правильно, приложение вернет статистику по сегментам следующего вида:
Segments on host val-sdw2 ======================================== Total number of segments: 8 ✅ Up: 8 ❌ Down: 0 🎉 Good news! All segments on this host are up
Дополнительную информацию о синтаксисе JDBC-драйвера см. в документации PostgreSQL JDBC Driver.