Подключение Postgres к dbt v1
profiles.yml нужен только для dbt v1 и dbt v2Если вы используете dbt platform, создавать файл profiles.yml не нужно. Этот файл необходим только при локальном использовании v1 или v2. Подробнее о предварительных требованиях для v2 см. в разделе Поддерживаемые возможности. Чтобы подключить вашу платформу данных к dbt, см. раздел О платформах данных.
- Поддерживается: dbt Labs
- Авторы: core dbt maintainers
- Репозиторий GitHub: dbt-labs/dbt-adapters
- Пакет PyPI:
dbt-postgres - Канал Slack: #db-postgres
- Поддерживаемая версия dbt: v0.4.0 и новее
- Поддержка dbt: Supported
- Минимальная версия платформы данных: n/a
Установка dbt-postgres
Установите адаптер с помощью `pip`:python -m pip install 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: [необязательно, 1 или больше]
keepalives_idle: 0 # по умолчанию 0, что означает использование системного значения по умолчанию. См. ниже
connect_timeout: 10 # по умолчанию 10 секунд
retries: 1 # по умолчанию 1 повторная попытка при ошибке или тайм-ауте во время открытия соединений
search_path: [необязательно, переопределяет значение search_path по умолчанию в postgres]
role: [необязательно, задаёт роль, которую dbt принимает при выполнении запросов]
sslmode: [необязательно, задаёт режим sslmode для подключения к базе данных]
sslcert: [необязательно, задаёт значение sslcert для указания расположения файла сертификата]
sslkey: [необязательно, задаёт значение sslkey для указания расположения закрытого ключа]
sslrootcert: [необязательно, задаёт новый путь к файлу в параметре sslrootcert для изменения расположения файла с корневыми сертификатами]
Конфигурации
search_path
Конфигурация search_path управляет "путем поиска" Postgres, который dbt настраивает при открытии новых соединений с базой данных. По умолчанию путь поиска Postgres — "$user, public", что означает, что неуточненные имена таблица будут искаться в схеме 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 и psycopg2-binary
При установке dbt-postgres по умолчанию устанавливается psycopg2-binary.
При установке psycopg2-binary используется предварительно собранная версия psycopg2, которая может быть не оптимизирована для вашего компьютера.
Этот вариант идеально подходит для разработки и тестирования, где производительность менее важна, чем скорость и простота установки.
Однако в производственных средах предпочтительнее использовать версию 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
Ваша ОС может иметь свои собственные зависимости в зависимости от вашей конкретной ситуации.