Перейти к содержимому
Последнее обновление

JDBC Catalog для PostgreSQL

Doris JDBC Catalog поддерживает подключение к базам данных PostgreSQL через стандартный интерфейс JDBC. В этом документе описано, как настроить подключение к базе данных PostgreSQL.

Общие сведения о JDBC Catalog см. в разделе Обзор JDBC Catalog.

Примечания по использованию​

Для подключения к базе данных PostgreSQL необходимы:

  • PostgreSQL 11.x или выше.

  • JDBC-драйвер для базы данных PostgreSQL. Последнюю или нужную версию можно скачать из Maven Repository. Рекомендуется использовать PostgreSQL JDBC Driver версии 42.5.x или выше.

  • Сетевое соединение между каждым узлом FE и BE в Doris и сервером PostgreSQL. Порт по умолчанию: 5432.

Подключение к PostgreSQL​

CREATE CATALOG postgresql_catalog PROPERTIES (
'type' = 'jdbc',
'user' = 'username',
'password' = 'pwd',
'jdbc_url' = 'jdbc:postgresql://host:5432/postgres',
'driver_url' = 'postgresql-42.5.6.jar',
'driver_class' = 'org.postgresql.Driver'
);

jdbc_url задаёт сведения о подключении и параметры, передаваемые JDBC-драйверу PostgreSQL. Поддерживаемые параметры URL перечислены в документации PostgreSQL JDBC Driver.

Безопасность подключения​

Если на источнике данных настроен TLS и установлен сертификат, признанный общедоверенным, можно включить TLS между кластером и источником данных, добавив параметры в строку подключения JDBC, заданную в свойстве jdbc_url.

Например, для версии 42 JDBC-драйвера PostgreSQL TLS включается добавлением параметра ssl=true в свойство конфигурации jdbc_url:

"jdbc_url"="jdbc:postgresql://example.net:5432/database?ssl=true"

Подробнее о параметрах настройки TLS см. в документации PostgreSQL JDBC Driver.

Сопоставление иерархий​

При сопоставлении с PostgreSQL база данных в Doris соответствует схеме в заданной базе данных PostgreSQL (как в примере с параметром jdbc_url для базы данных postgres). Таблица в базе данных Doris соответствует таблице в этой схеме PostgreSQL. Соответствие показано ниже:

DorisPostgreSQL
CatalogБаза данных
База данныхСхема
ТаблицаТаблица

Сопоставление типов столбцов​

Тип PostgreSQLТип Doris
booleanboolean
smallint/int2smallint
integer/int4int
bigint/int8bigint
decimal/numericdecimal(P, S) / stringТип numeric без указания точности сопоставляется с типом string. Для числовых вычислений его необходимо преобразовать в тип decimal. Обратная запись не поддерживается.
real/float4float
doubledouble
smallserialsmallint
serialint
bigserialbigint
char(N)char(N)
varchar/textstring
timestamp(S)datetime(S)
timestamptz(S)TIMESTAMPTZ(S)Начиная с версии 4.1.5 этот тип всегда сопоставляется с TIMESTAMPTZ(S). Свойство enable.mapping.timestamp_tz сохранено для совместимости; установка значения false больше не восстанавливает сопоставление с DATETIME. Точность ограничена значением 6, поэтому более высокая точность теряется. В более ранних версиях это свойство позволяет выбрать прежнее сопоставление.
datedate
json/jsonbstringДля баланса производительности чтения и вычислений Doris сопоставляет тип JSON с типом STRING.
timestringDoris не поддерживает тип time, поэтому он сопоставляется с типом string.
intervalstring
point/line/lseg/box/path/polygon/circlestring
cidr/inet/macaddrstring
uuidstring
bitboolean / stringDoris не поддерживает тип bit. При bit(1) он сопоставляется с типом boolean, а в остальных случаях с типом string.
byteaVARBINARYНачиная с версии 4.1.5 этот тип всегда сопоставляется с VARBINARY. Свойство enable.mapping.varbinary сохранено для совместимости; установка значения false больше не восстанавливает сопоставление с STRING. В более ранних версиях это свойство позволяет выбрать прежнее сопоставление.
arrayarrayСпособы сопоставления типов массивов описаны ниже.
другиеUNSUPPORTED
  • Типы массивов

    В PostgreSQL типы массивов можно определять следующим образом:

    col1 text[]
    col2 in4[][]

    Однако число измерений массива нельзя получить непосредственно из метаданных PostgreSQL. Например, text[] может быть как одномерным, так и двумерным массивом. Число измерений массива можно определить только после записи данных.

    Doris требует явно указывать число измерений массива. Поэтому Doris может правильно сопоставить тип только в том случае, если соответствующий столбец с массивами в PostgreSQL содержит данные; в противном случае столбец будет сопоставлен с UNSUPPORTED.

Приложение​

Проблемы с часовыми поясами​

Поскольку Doris не поддерживает типы timestamp с часовыми поясами, при чтении типа timestampz из PostgreSQL Doris сопоставляет его с типом DATETIME и преобразует время в местный часовой пояс.

При чтении данных из Catalog типа JDBC часть BE, написанная на Java, использует часовой пояс JVM. По умолчанию часовой пояс JVM совпадает с часовым поясом машины, на которой развёрнут BE. Это влияет на преобразование часовых поясов при чтении данных через JDBC.

Чтобы обеспечить согласованность часовых поясов, рекомендуется задать часовой пояс JVM в JAVA_OPTS файла be.conf так, чтобы он совпадал со значением time_zone сеанса Doris.