Для доступа пользователей к Redshift мы используем федеративную защиту между ADFS и IAM. Мы можем успешно подключаться и взаимодействовать с Redshift через dBeaver и другие инструменты, используя строку подключения JDBC, а также с Python, используя пользователя в базе данных, а не федеративного пользователя. Однако psycopg2, pg8000 и sqlalchemy терпят неудачу из-за дополнительных опций подключения, необходимых для этой модели.
Наша строка подключения:
jdbc:redshift:iam://{host}:{port}/{database}?plugin_name=com.amazon.redshift.plugin.AdfsCredentialsProvider&preferred_role=arn:aws:iam::{RoleID}:role/{Group}&idp_host=sts.{Domain}.com&idp_port=443&autocreate=true&user={Domain}\username&password={Password}
psycopg2, pg8000 и sqlalchemy все терпят неудачу с некоторой версией ниже
invalid connection option "plugin_name"
или
Could not parse rfc1738 URL from string 'redshift+psycopg2:iam://
Предположительно, из-за специфических опций Redshift и AWS и протокола IAM.
Единственное решение, которое работает, - это использование JayDeBeAPI, поскольку оно будет принимать необработанную строку соединения JDBC - независимо от того, насколько специализированной. Эта проблема заключается в том, что JayDeBeAPI значительно медленнее, чем другие библиотеки - например, 26 секунд для запроса строки 70k против 1.2 в psycopg2.
Есть ли какой-нибудь возможный способ передачи произвольных опций подключения в psycopg2 или pg8000? Или любые другие библиотеки Python, которые будут выполнять это?