Настройка Postgres
profiles.yml предназначен только для dbt Core и dbt FusionЕсли вы используете dbt platform, вам не нужно создавать файл profiles.yml. Этот файл требуется только в том случае, если вы используете dbt Core или dbt Fusion локально. Чтобы узнать больше о требованиях к Fusion, см. раздел Supported features. Чтобы подключить вашу платформу данных к dbt, см. раздел About data platforms.
- Поддерживается: dbt Labs
- Авторы: core dbt maintainers
- Репозиторий GitHub: dbt-labs/dbt-adapters
- Пакет PyPI:
dbt-postgres - Канал в Slack: #db-postgres
- Поддерживаемая версия dbt Core: v0.4.0 и новее
- Поддержка dbt: Supported
- Минимальная версия платформы данных: n/a
Установка dbt-postgres
Установите адаптер с помощью pip. До версии 1.8 установка адаптера автоматически устанавливала dbt-core и любые дополнительные зависимости. Начиная с 1.8 установка адаптера не устанавливает dbt-core автоматически. Это потому, что версии адаптеров и dbt Core были развязаны, и мы больше не хотим перезаписывать существующие установки dbt-core.
Используйте следующую команду для установки:
python -m pip install dbt-core dbt-postgres
Настройка dbt-postgres
Конфигурацию, специфичную для Postgres, см. на странице настроек Postgres.
Конфигурация профиля
Цели Postgres должны быть настроены с использованием следующей конфигурации в вашем файле profiles.yml.
company-name:
target: dev
outputs:
dev:
type: postgres
host: [hostname]
user: [username]
password: [password]
port: [port]
dbname: [database name] # или database вместо dbname
schema: [dbt schema]
threads: [optional, 1 или более]
keepalives_idle: 0 # по умолчанию 0, что означает системное значение по умолчанию. См. ниже
connect_timeout: 10 # по умолчанию 10 секунд
retries: 1 # по умолчанию 1 повтор при ошибке/тайм-ауте при открытии соединений
search_path: [optional, переопределить путь поиска postgres по умолчанию]
role: [optional, установить роль, которую dbt принимает при выполнении запросов]
sslmode: [optional, установить sslmode, используемый для подключения к базе данных]
sslcert: [optional, установить sslcert для управления местоположением файла сертификата]
sslkey: [optional, установить sslkey для управления местоположением закрытого ключа]
sslrootcert: [optional, установить значение конфигурации sslrootcert на новый путь к файлу, чтобы настроить местоположение файла, содержащего корневые сертификаты]
Конфигурации
search_path
Конфигурация search_path управляет "путем поиска" Postgres, который dbt настраивает при открытии новых соединений с базой данных. По умолчанию путь поиска Postgres — "$user, public", что означает, что неуточненные имена table будут искаться в схеме public или в схеме с тем же именем, что и у вошедшего пользователя. Примечание: Установка search_path на пользовательское значение не является необходимой или рекомендуемой для типичного использования dbt.
role
Конфигурация role управляет ролью Postgres, которую dbt принимает при открытии новых соединений с базой данных.
sslmode
Конфигурация sslmode управляет тем, как dbt подключается к базам данных Postgres с использованием SSL. См. документацию Postgres о sslmode для получения информации о использовании. Если не установлено, dbt будет подключаться к базам данных, используя значение по умолчанию Postgres, prefer, в качестве sslmode.
sslcert
Конфигурация sslcert управляет местоположением файла сертификата, используемого для подключения к Postgres при использовании клиентских SSL-соединений. Чтобы использовать файл сертификата, который не находится в местоположении по умолчанию, установите путь к этому файлу, используя это значение. Без этой конфигурации dbt использует местоположения по умолчанию Postgres. См. Клиентские сертификаты в документации Postgres SSL для путей по умолчанию.
sslkey
Конфигурация sslkey управляет местоположением закрытого ключа для подключения к Postgres с использованием клиентских SSL-соединений. Если эта конфигурация не указана, dbt использует местоположение ключа по умолчанию для Postgres. См. Клиентские сертификаты в документации Postgres SSL для местоположений по умолчанию.
sslrootcert
При подключении к серверу Postgres с использованием клиентского SSL-соединения dbt проверяет, что сервер предоставляет SSL-сертификат, подписанный доверенным корневым сертификатом. Эти корневые сертификаты по умолчанию находятся в файле ~/.postgresql/root.crt. Чтобы настроить местоположение этого файла, установите значение конфигурации sslrootcert на новый путь к файлу.
keepalives_idle
Если база данных закрывает соединение, пока dbt ожидает данные, вы можете увидеть ошибку SSL SYSCALL error: EOF detected. Уменьшение значения keepalives_idle может предотвратить это, так как сервер будет чаще отправлять пинг, чтобы поддерживать активное соединение.
Настройка по умолчанию в dbt — 0 (значение по умолчанию для сервера), но может быть настроена на более низкое значение (возможно, 120 или 60 секунд), за счет более частого сетевого обмена.
retries
Если dbt-postgres сталкивается с операционной ошибкой или тайм-аутом при открытии нового соединения, он будет повторять попытку до количества раз, указанного в retries. Значение по умолчанию — 1 повтор. Если установлено 2+ повторов, dbt будет ждать 1 секунду перед повторной попыткой. Если установлено 0, dbt не будет повторять попытки вообще.
psycopg2 vs psycopg2-binary
psycopg2-binary устанавливается по умолчанию при установке dbt-postgres.
При установке psycopg2-binary используется предварительно собранная версия psycopg2, которая может быть не оптимизирована под конкретную машину.
Это идеально подходит для процессов разработки и тестирования, где производительность менее критична, а скорость и простота установки важнее.
Однако для production‑окружений будет полезнее версия psycopg2, собранная из исходного кода под конкретную операционную систему и архитектуру. В таком сценарии скорость и простота установки отходят на второй план, поскольку основной фокус делается на длительной и стабильной эксплуатации.
Чтобы использовать psycopg2:
- Установите
dbt-postgres - Удалите
psycopg2-binary - Установите эквивалентную версию
psycopg2
pip install dbt-postgres
if [[ $(pip show psycopg2-binary) ]]; then
PSYCOPG2_VERSION=$(pip show psycopg2-binary | grep Version | cut -d " " -f 2)
pip uninstall -y psycopg2-binary && pip install psycopg2==$PSYCOPG2_VERSION
fi
Установка psycopg2 часто требует зависимостей на уровне ОС.
Эти зависимости могут варьироваться в зависимости от операционных систем и архитектур.
Например, на Ubuntu вам нужно установить libpq-dev и python-dev:
sudo apt-get update
sudo apt-get install libpq-dev python-dev
тогда как на Mac вам нужно установить postgresql:
brew install postgresql
pip install psycopg2
Ваша ОС может иметь свои собственные зависимости в зависимости от вашей конкретной ситуации.