Работа с базами данных 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
. Такой способ обработки называется пушдаун фильтров
.
Пушдаун фильтров возможен при использовании:
Описание | Пример |
---|---|
Фильтров вида IS NULL /IS NOT NULL |
WHERE column1 IS NULL или WHERE column1 IS NOT NULL |
Логических условий OR , NOT , AND . |
WHERE column IS NULL OR column2 is NOT NULL . |
Условий сравнения = , <> , < , <= , > , >= c другими колонками или константами. |
WHERE column3 > column4 OR column5 <= 10 . |
Поддерживаемые типы данных для пушдауна фильтров:
Тип данных Yandex Query |
---|
Bool |
Int8 |
Int16 |
Int32 |
Int64 |
Float |
Double |
Поддерживаемые типы данных
В базе данных 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> |