无法找出DB URI Postgres Azure

时间:2017-06-22 06:19:28

标签: python database postgresql azure

我最近在Azure上创建了一个Postgres数据库,并且在查找我的数据库URI时遇到了很多麻烦。信用证看起来像:

服务器:name.postgres.database.azure.com

用户(管理员角色):admin @ name

密码:mypassword

数据库名称:postgres

因此,我尝试使用psql并传入连接字符串psql postgresql://admin@name:mypassword@name.postgres.database.azure.com:5432/postgres

但它给了我一个错误

  

psql:无法翻译主机名"名称"解决:nodename也不是   提供或未知的servname

有趣的是,这有效:

psql -h name.postgres.database.azure.com -p 5432 -U admin@name postgres

我问的原因是因为我想使用Python和sqlalchemy并希望传入DB uri字符串。

2 个答案:

答案 0 :(得分:1)

好吧,至少对我而言,这是有效的。如果其他人遇到同样的问题,请在此处发布。

  1. 为了连接到SQLAlchemy,传入这个DB URI对我有用: PostgreSQL的://用户名:密码@主机名:端口/ DBNAME。例如,
  2. 的PostgreSQL://管理员@名:password@name.postgres.database.azure.com:5432 / postgres的

    1. 要在命令行中使用psql,以下内容对我有用: psql“dbname = postgres host = name.postgres.database.azure.com user = admin @ name password = password port = 5432”
    2. 请注意,请小心转义任何特殊字符(例如密码)。例如,我正在使用一个bash shell,并且有特殊字符会引发一些奇怪的怪异。

      1. 要连接到psycopg2,我按照此处的说明操作:https://docs.microsoft.com/en-us/azure/postgresql/connect-python
      2. 您还可以按照此处的说明解析网址:Connect to an URI in postgres

答案 1 :(得分:0)

根据我的经验,使用连接url作为psql的连接字符串的错误是由使用Greed-Pattern算法的psql连接字符串解析器引起的。

根据psql连接字符串的31.1.2. Parameter Key Words小节,user参数关键字定义如下。

  

用户

     

要连接的PostgreSQL用户名。默认值与运行应用程序的用户的操作系统名称相同。

user命名需要匹配正则表达式 通过NAME_REGEX配置变量配置,如下所示,请参阅文档Linux Username Conventions以了解详细信息。

  

NAME_REGEX

     

根据此常规检查用户名和组名   表达。如果名称与此正则表达式不匹配,则用户和   除非--force-badname是,否则拒绝在adduser中创建组   组。设置--force-badname后,仅执行弱检查。   默认值是最保守的^ [a-z] [ - a-z0-9] * $。

因此,Azure上的postgres用户名不是标准的类Unix名称,它与Azure服务的Azure用户命名模式username@servname匹配,例如Azure for Azure App服务,Azure SQL数据库和Azure上的Postgres等等。

以上原因导致Azure postgres连接url与psql工具不兼容,但不担心将Python与psycopg2一起使用,您可以参考官方教程{{3知道它。