Работа с базами данных Managed Service for PostgreSQL
В этом разделе приведена основная информация о работе с Managed Service for PostgreSQL.
Для работы с базой данных Managed Service for PostgreSQL выполните следующие шаги:
- Создайте соединение, содержащее реквизиты для подключения к базе данных.
- Выполните запрос к базе данных.
Пример запроса для чтения данных из Managed Service for PostgreSQL:
SELECT * FROM postgresql_mdb_connection.my_table
Где:
postgresql_mdb_connection— название созданного соединения с базой данных.my_table— имя таблицы в базе данных.
Настройка соединения
Чтобы создать соединение с Managed Service for PostgreSQL:
-
В консоли управления
выберите каталог, в котором нужно создать соединение. -
Перейдите
в сервис Yandex Query. -
На панели слева выберите Соединения.
-
Нажмите кнопку
Создать. -
Укажите параметры соединения:
-
В блоке Общие параметры:
- Имя — название соединения с Managed Service for PostgreSQL.
- Тип —
Managed Service for PostgreSQL.
-
В блоке Параметры типа соединения:
-
Кластер — выберите существующий кластер Managed Service for PostgreSQL или создайте новый.
-
Сервисный аккаунт — выберите существующий сервисный аккаунт Managed Service for PostgreSQL или создайте новый с ролью
managed-postgresql.viewer, от имени которого будет выполняться подключение к кластерам Managed Service for PostgreSQL.Чтобы использовать сервисный аккаунт, пользователю нужна роль
iam.serviceAccounts.user. -
База данных — выберите базу данных, которая будет использоваться при работе с кластером PostgreSQL.
-
Схема — укажите пространство имен
, которое будет использоваться при работе с базой данных PostgreSQL. -
Логин — имя пользователя для подключения к базе данных PostgreSQL.
-
Пароль — пароль пользователя для подключения к базе данных PostgreSQL.
-
-
-
Нажмите кнопку Создать.
Сервисный аккаунт необходим для обнаружения точек подключения к кластерам Managed Service for PostgreSQL внутри Yandex Cloud. Для работы с данными отдельно задайте имя пользователя и пароль.
Важно
Разрешите сетевой доступ от Yandex Query до кластеров Managed Service for PostgreSQL. Для этого в настройках базы данных, к которой выполняется подключение, включите опцию «Доступ из Yandex Query».
Синтаксис запросов
Для работы с PostgreSQL используется следующая форма SQL-запроса:
SELECT * FROM <соединение>.<имя_таблицы>
Где:
<соединение>— название созданного соединения с базой данных.<имя_таблицы>— имя таблицы в базе данных.
Ограничения
При работе с кластерами PostgreSQL действуют следующие ограничения:
-
Внешние источники доступны только для чтения данных через запросы
SELECT. Запросы, модифицирующие таблицы во внешних источниках, сервисом Yandex Query в настоящее время не поддерживаются. - В YQ используется система типов
Yandex Managed Service for YDB. Однако диапазоны допустимых значений для типов, использующихся в YDB при работе с датой и временем (Date,Datetime,Timestamp), зачастую оказываются недостаточно широкими для того, чтобы вместить значения соответствующих типов PostgreSQL (date,timestamp).
В связи с этим значения даты и времени, прочитанные из PostgreSQL, возвращаются YQ как обычные строки (типOptional<Utf8>) в формате ISO-8601 .
Пушдаун фильтров
Yandex Query умеет передавать обработку частей запросов в систему-источник данных. Это означает, что фильтрующие выражения передаются сквозь Yandex Query непосредственно в базу данных для обработки, обычно это условия запросов, указанных в WHERE. Такой способ обработки называется пушдаун фильтров.
Пушдаун фильтров возможен при использовании:
| Описание | Пример |
|---|---|
Проверка на NULL |
WHERE column1 IS NULL или WHERE column1 IS NOT NULL |
Логических условий OR, NOT, AND и круглых скобок для управления приоритетом вычислений. |
WHERE column1 IS NULL OR (column2 IS NOT NULL AND column3 > 10). |
Операторов сравнения =, ==, !=, <>, >, <, >=, <= с другими колонками или константами. |
WHERE column1 > column2 OR column3 <= 10, WHERE column1 + column2 > 10, WHERE column1 = (10 + 10) |
При использовании других видов фильтров пушдаун на источник не выполняется: фильтрация строк внешней таблицы будет выполнена на стороне федеративной Yandex Query, что означает, что Yandex Query выполнит полное чтение (full scan) внешней таблицы в момент обработки запроса.
Поддерживаемые типы данных для пушдауна фильтров:
| Тип данных Yandex Query |
|---|
Bool |
Int8 |
Int16 |
Int32 |
Int64 |
Float |
Double |
Decimal |
Поддерживаемые типы данных
В базе данных PostgreSQL признак опциональности значений колонки (разрешено или запрещено колонке содержать значения NULL) не является частью системы типов. Ограничение (constraint) NOT NULL для каждой колонки реализуется в виде атрибута attnotnull в системном каталоге pg_attributeNULL, и в системе типов YQ они должны отображаться в опциональные
Ниже приведена таблица соответствия типов PostgreSQL и Yandex Query. Все остальные типы данных, за исключением перечисленных, не поддерживаются.
| Тип данных PostgreSQL | Тип данных Yandex Query | Примечания |
|---|---|---|
boolean |
Optional<Bool> |
|
smallint |
Optional<Int16> |
|
int2 |
Optional<Int16> |
|
integer |
Optional<Int32> |
|
int |
Optional<Int32> |
|
int4 |
Optional<Int32> |
|
serial |
Optional<Int32> |
|
serial4 |
Optional<Int32> |
|
bigint |
Optional<Int64> |
|
int8 |
Optional<Int64> |
|
bigserial |
Optional<Int64> |
|
serial8 |
Optional<Int64> |
|
real |
Optional<Float> |
|
float4 |
Optional<Float> |
|
double precision |
Optional<Double> |
|
float8 |
Optional<Double> |
|
date |
Optional<Utf8> |
|
timestamp |
Optional<Utf8> |
|
bytea |
Optional<String> |
|
character |
Optional<Utf8> |
Правила сортировки |
character varying |
Optional<Utf8> |
Правила сортировки |
text |
Optional<Utf8> |
Правила сортировки |
json |
Optional<Json> |
|
numeric(p,s) |
Optional<Decimal(p,s)> |
p (precision) - общее количество знаков в числе, s (scale) - количество знаков после запятой. Типы numeric без указания параметров (так называемые «неограниченные», unconstrained) преобразуются в Optional<Decimal(35, 0)>. Типы numeric, у которых p > 35 или s < 0, не поддерживаются. |