Устранение неполадок PostgreSQL

Решения распространенных проблем с подключением PostgreSQL, схемой и SSL в построителе API данных.

Распространенные вопросы

Что такое поддержка PostgreSQL в DAB?

Построитель данных поддерживает PostgreSQL в качестве серверной части реляционной базы данных. DAB подключается с помощью драйвера Npgsql и преобразует запросы REST и GraphQL в запросы SQL. Поддерживаются как локальные экземпляры PostgreSQL, так и управляемые службы, такие как База данных Azure для PostgreSQL.

Какой формат строки подключения использует PostgreSQL?

DAB использует строку подключения в стиле ADO.NET для PostgreSQL. Типичная строка выглядит следующим образом Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword;. Задайте строку подключения в поле data-source.connection-string или передайте ее через --connection-string в dab init.

Поддерживает ли DAB схемы PostgreSQL?

Да. DAB поддерживает непубличные схемы. Укажите схему явно в поле сущности source с помощью формата schemaname.tablename (например, sales.orders). Пользователь базы данных, настроенный в строке подключения, должен иметь USAGE привилегии на схему и SELECT, INSERT, UPDATE или DELETE привилегии на целевых таблицах.

Распространенные проблемы

Не удается подключиться к контейнеру PostgreSQL

Симптом: DAB не удается начать с Failed to connect to localhost:5432 или аналогичной сетевой ошибки.

Причина: Порт контейнера PostgreSQL не назначен или контейнер не готов принимать соединения.

Разрешение: Убедитесь, что контейнер запущен, и что docker ps порт 5432 сопоставляется с хостом. Используйте Host=localhost;Port=5432 в строке подключения. Если контейнер только что запущен, позвольте несколько секунд, чтобы PostgreSQL инициализировался перед запуском DAB.

Сбой проверки подлинности паролей

Симптом: журналы DAB показывают 28P01: password authentication failed for user.

Причина: Имя пользователя или пароль в строке подключения неверны, или пользователь PostgreSQL настроен для другого метода проверки подлинности, например, peer или ident.

Разрешение: Убедитесь, что учетные данные соответствуют тем, которые были заданы при создании экземпляра или контейнера PostgreSQL. Для контейнеров проверьте переменные среды POSTGRES_PASSWORD и POSTGRES_USER. При локальном запуске убедитесь, что pg_hba.conf позволяет использовать md5 или scram-sha-256 для проверки подлинности подключающегося узла.

Схема не найдена, когда сущность ссылается на недоступную схему

Симптом: DAB возвращает ошибку relation "tablename" does not exist , даже если таблица существует в базе данных.

Причина: Поле сущности source пропускает префикс схемы, поэтому PostgreSQL выполняет поиск только в схеме public по умолчанию.

Разрешение: Обновите значение в source, чтобы включить префикс схемы, например, sales.orders. Убедитесь, что пользователь базы данных имеет USAGE права на схему, выполнив команду GRANT USAGE ON SCHEMA sales TO myuser; в psql.

Ошибка: требуется SSL при подключении к базе данных Azure для PostgreSQL

Симптом: Сбой SSL connection is requiredподключений к базе данных Azure для PostgreSQL.

Причина: База данных Azure для PostgreSQL по умолчанию требует использование SSL. Подключения без SSL отклоняются.

Разрешение: Добавьте Ssl Mode=Require; к строке подключения. Для полной проверки сертификата также задайте Trust Server Certificate=false и укажите путь к сертификату ЦС сервера через Root Certificate=path/to/ca.pem. Скачайте пакет сертификатов на портале Azure в параметрах сети сервера.

Хранимые процедуры не поддерживаются

Симптом: Настройка хранимой процедуры или функции PostgreSQL в качестве источника объекта приводит к ошибке, или объект не работает должным образом.

Причина: Конструктор API данных в настоящее время не поддерживает хранимые процедуры для PostgreSQL. Это известное ограничение, отслеживаемое в проблеме GitHub #1023.

Разрешение: Вместо этого используйте таблицу или представление в качестве источника сущности. Следите за задачей на GitHub, чтобы получать обновления о добавлении поддержки хранимых процедур PostgreSQL.

Политика базы данных не применяется для операций создания объектов

Симптом: Создание изменения или запрос POST завершается успешно, даже если политика базы данных должна ограничить операцию.

Причина: Поддержка политики базы данных для действий создания в PostgreSQL не реализована еще. Это известное ограничение, отслеживаемое в проблеме GitHub #1334.

Разрешение: Используйте разрешения на основе ролей, чтобы ограничить доступ к созданию, пока не будет доступна поддержка политики базы данных для PostgreSQL Create.

Политика базы данных не применяется для операций PUT и PATCH

Симптом: Запрос PUT или PATCH для сущности PostgreSQL завершается успешно, даже если политика базы данных должна ограничить ее.

Причина: Поддержка политики базы данных для операций PUT и PATCH в PostgreSQL еще не реализована. Это известное ограничение, отслеживаемое в проблеме GitHub #1372.

Разрешение: Используйте разрешения на основе ролей, чтобы ограничить доступ к обновлению до тех пор, пока не будет доступна поддержка политики базы данных для операций обновления PostgreSQL.

Аутентификация On-Behalf-Of (OBO) не поддерживается.

Симптом: Настройка проверки подлинности Behalf-Of (OBO) для экземпляра DAB, поддерживаемого PostgreSQL, завершается сбоем или токен не перенаправлен в базу данных, как ожидалось.

Причина: Проверка подлинности OBO в настоящее время поддерживается только для SQL Server и Azure SQL. Поддержка PostgreSQL, MySQL и Azure Cosmos DB еще не реализована. Это известное ограничение, отслеживаемое в проблеме GitHub #3159.

Разрешение: Используйте поддерживаемый метод проверки подлинности, например учетные данные строки подключения или управляемое удостоверение для PostgreSQL. Следите за задачей GitHub для обновлений о расширении поддержки OBO на другие базы данных, кроме SQL Server.