2017-06-22 75 views
0

我最近在Azure上创建了一个Postgres数据库,并且在计算出我的数据库URI时遇到了很多麻烦。 vim的信任状看起来像:无法确定数据库URI Postgres Azure

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

用户(管理员角色):管理员@名

密码:MYPASSWORD

DB名称:Postgres的

所以我试图用psql,并通过在连接字符串中,psql postgresql://[email protected]:[email protected]:5432/postgres

但它给我一个错误

PSQL:无法解析主机名 “名” 来解决:节点名,也不 servname提供,或者不知道

有趣的是,这个工程:

psql -h name.postgres.database.azure.com -p 5432 -U [email protected] postgres

我之所以问,是因为我想使用Python和sqlalchemy,并希望传入DB uri字符串。

回答

1

好吧,至少对我来说,这是有效的。如果其他人遇到同一问题,请在此发帖。

  1. 用于连接到SQLAlchemy的传递这个DB URI为我工作: PostgreSQL的://用户名:密码@主机名:端口/ DBNAME。例如,

的PostgreSQL://管理员@名:[email protected]:5432/postgres的

  • 对于命令使用psql线,下面为我工作: PSQL “DBNAME = Postgres的举办= name.postgres.database.azure.com用户=管理员@名密码=密码端口= 5432”
  • 注意,要小心转义任何特殊字符(例如你的密码)。例如,我使用了一个bash shell并且有特殊字符抛出了一些奇怪的怪异。

  • 用于连接到psycopg2我按照说明在这里:https://docs.microsoft.com/en-us/azure/postgresql/connect-python
  • 您也可以解析URL这里的操作说明:Connect to an URI in postgres

    0

    根据我的经验,使用连接URL作为psql的连接字符串的错误是由使用贪婪模式算法的psql连接字符串解析器导致的。

    根据012,的psql连接字符串,user参数关键字定义如下。

    用户

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

    user命名需要匹配正则表达式 经由NAME_REGEX配置变量配置,如下,请参考文档Linux Username Conventions知道的细节。

    NAME_REGEX

    用户和组名称针对此正则表达式 检查。如果名称不匹配此正则表达式,除非--force-badname为 集,否则会拒绝adduser中的用户和组的创建。使用--force-badname设置,只执行弱检查。 默认值是最保守的^ [a-z] [ - a-z0-9] * $。

    所以在Azure上的Postgres的用户名是不是一个标准的类Unix的名称,匹配其Azure的用户命名模式[email protected]对Azure的服务,如FTP为Azure的应用服务,Azure的SQL数据库,和Postgres在Azure上,等等

    以上原因,该Postgres的Azure的连接网址与psql工具兼容,但不psycopg2担心使用Python,可以参考官方教程Azure Database for PostgreSQL: Use Python to connect and query data知道。

    +0

    注意,在以下方面与psql连接,按照这里的文档:http://postgresguide.com/utilities/psql.html,我实际上能够使用:'psql“dbname = dbhere host = hosthere user = userhere password = pwhere port = 5432” '。但是,感谢链接到Azure官方教程连接到python与postgres – Vincent

    +0

    我无法连接通过sqlalchemy。我可以通过psycopg2连接,我认为.. – Vincent

    +0

    @Vincent你可以发布一个新线程,通过sqlalchemy连接故障吗? –

    相关问题