【问题标题】:cannot connect to azure postresql - Username should be in <username@hostname> format无法连接到 azure postgresql - 用户名应为 <username@hostname> 格式
【发布时间】:2020-09-25 08:43:41
【问题描述】:

我正在尝试将 Azure PostgreSQL 用于 CKAN (ckan.org) CKAN 正在使用http://www.sqlalchemy.org/ 进行数据库连接。

连接字符串如下所示:

engine = create_engine('postgresql://scott:tiger@myhost.postgres.database.azure.com:5432/mydatabase')

语法是:

postgresql://username:password@hostname:5432/databasename

尝试连接到 azure postgresql 时出现此错误:

致命:指定的用户名无效。请检查用户名和 重试连接。用户名应采用用户名@主机名格式。

如果我尝试使用这样的用户名格式:

postgresql://scott@myhost:tiger@myhost.postgres.database.azure.com:5432/mydatabase

然后我得到:

端口号无效:“tiger@myhost.postgres.database.azure.com:5432”

有人解决了吗?

【问题讨论】:

    标签: postgresql azure sqlalchemy ckan


    【解决方案1】:

    无效的端口号是由用户名中的@引起的。

    连接 url 应如下所示:

    postgresql://scott%40myhost:tiger@myhost.postgres.database.azure.com:5432/mydatabase
    

    【讨论】:

      【解决方案2】:

      扩展 Allan Kristensen 的答案,如果您使用数据存储扩展(与 CKAN 核心捆绑),您最终会遇到问题。

      查看 CKAN 的代码库,问题出在 https://github.com/ckan/ckan/blob/555e0960c43d0ca86066b1954e5c94aad565baa7/ckanext/datastore/backend/postgres.py#L1592(或 https://github.com/ckan/ckan/blob/ckan-2.6.4/ckanext/datastore/plugin.py#L200,如果您运行的是 2.6.5 或更低版本)

      因此,当 CKAN 使用 SELECT has_table_privilege('scott@myhost', '_foo', 'INSERT') 查询数据库时,它会失败,因为没有名为 scott@myhost 的用户。 Azure 对用户名做了一些奇怪的事情,就像你要求数据库列出用户一样,你会看到数据库认为你的用户名是 scott(至少它对我做了什么......)

      一种可能的、骇人听闻的修复方法是:

      sed -i '' 's/read_connection_user = sa_url.make_url(self.read_url).username/read_connection_user = split(sa_url.make_url(self.read_url).username, "@")[0]/' /srv/app/src/ckan/ckanext/datastore/plugin.py
      sed -i '' 's/import sys/import sys\nfrom string import split/' /srv/app/src/ckan/ckanext/datastore/plugin.py
      

      以上适用于 2.6.5。如果您运行的是 2.7+,请用 /srv/app/src/ckanext/datastore/backend/postgres.py 替换文件路径

      在上游找到适当的修复之前,上述方法应该有效。

      【讨论】:

      • 在 2.8 中,您在回答中描述的问题也会发生。不过,我的连接总体上看起来完全没问题,只是在此检查中数据存储区会执行此操作。
      猜你喜欢
      • 2020-04-28
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多