Использование JDBC-драйвера для подключения JVM-приложений к ADB

JDBC (Java Database Connectivity) — это стандартный Java API, позволяющий создавать подключения JVM-приложений к базам данных. Для подключения к ADB можно использовать PostgreSQL JDBC Driver.

Чтобы воспользоваться драйвером, загрузите соответствующий JAR-файл или укажите зависимость, используя систему сборки.

  • Maven

  • Gradle (Kotlin)

  • Gradle (Groovy)

  • Download 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"
  1. Напишите код на 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, как описано в разделе Удаленное подключение.

  2. Скомпилируйте и запустите проект. Будет предложено ввести имя хоста (Enter a hostname).

  3. Введите имя хоста, статистику по сегментам с которого требуется показать. Если соединение установлено успешно и имя хоста указано правильно, приложение вернет статистику по сегментам следующего вида:

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.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней