2017-06-22 14 views
0

Ich habe vor kurzem eine Postgres-Datenbank auf Azure hochgespielt und ich habe viel Mühe, herauszufinden, meine DB URI. Die creds in etwa so aussehen:Ich kann keine DB URI Postgres Azure

Server: name.postgres.database.azure.com

Benutzer (Admin-Rolle): admin @ Name

Passwort: meinkennwort

DB Name: Postgres

Also versuche ich psql zu verwenden und in der Verbindungszeichenfolge übergeben, psql postgresql://[email protected]:[email protected]:5432/postgres

Aber es gibt mir ein Fehler

psql: nodename noch servname zur Verfügung gestellt, oder nicht bekannt

Interessanterweise funktioniert dies: konnte nicht Host-Namen "name" zu adressieren übersetzen

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

Der Grund, warum ich frage, ist, weil ich Python und sqlalchemy verwenden möchte und die DB uri Zeichenfolge übergeben möchte.

Antwort

1

Ok zumindest für mich funktioniert das. Hier für den Fall, dass andere auf dasselbe Problem stoßen.

  1. Denn in dieser DB URI SQLAlchemy vorbei verbinden für mich gearbeitet: postgresql: // user: password @ hostname: port/dbname. Zum Beispiel

postgresql: // admin @ Name: [email protected]: 5432/Postgres

  1. für psql in Befehl Linie, die folgenden für mich gearbeitet: psql "dbname = postgres host = name.postgres.database.azure.com user = admin @ Name password = Passwort port = 5432"

Hinweis darauf achten, jede zu entkommen Sonderzeichen (zB für Ihr Passwort). Zum Beispiel benutze ich eine Bash-Shell und spezielle Charaktere haben seltsame Kuriositäten hervorgebracht.

  1. Zum Anschluss ich die Anweisungen befolgt psycopg2 hier: https://docs.microsoft.com/en-us/azure/postgresql/connect-python

Sie können auch eine URL analysieren hier folgen Sie den Anweisungen: Connect to an URI in postgres

0

Nach meiner Erfahrung wurde der Fehler bei der Verwendung der Verbindungs-URL als Verbindungszeichenfolge für psql durch den psql Verbindungszeichenfolgen-Parser mit Greed-Pattern-Algorithmus verursacht.

Gemäß dem Unterabschnitt 31.1.2. Parameter Key Words für die Verbindungszeichenfolge psql ist das Parameterschlüsselwort user wie folgt definiert.

Benutzer

PostgreSQL-Benutzernamen zu verbinden. Der Standardwert ist derselbe wie der Betriebssystemname des Benutzers, der die Anwendung ausführt.

Die user Namensgebung müssen über die NAME_REGEX Konfigurationsvariable, wie unter den regulären Ausdruck konfiguriert übereinstimmen, finden Sie das Dokument Linux Username Conventions die Details zu kennen.

NAME_REGEX

Benutzer- und Gruppennamen sind gegen diesen regulären Ausdruck geprüft. Wenn der Name nicht mit diesem Regexp übereinstimmt, wird die Erstellung des Benutzers und in adduser abgelehnt, es sei denn, --force-badname ist festgelegt. Mit --force-badname set werden nur schwache Checks durchgeführt. Der Standardwert ist der konservativste^[a-z] [- a-z0-9] * $.

So ist der Postgres Benutzernamen auf Azure ist kein Standard-Unix-ähnlichen Namen, die Muster [email protected] für Azure-Dienste wie FTP für Azure App-Service, Azure SQL-Datenbank und Postgres auf Azure Namensgebung Azure Benutzers entsprechen, etc.

Die obige Ursache, dass die Azure Verbindung url postgres ist nicht kompatibel mit psql Werkzeug, aber keine Sorge über Python mit psycopg2, Sie zu den offiziellen Tutorial Azure Database for PostgreSQL: Use Python to connect and query data beziehen können, es zu wissen.

+0

Beachten Sie, dass in Bezug auf die Verbindung mit psql, nach der Dokumentation hier: http://postgresguide.com/utilities/psql.html, konnte ich tatsächlich verbinden mit: 'psql" dbname = dbhere host = hosthier user = userhere Passwort = pwhere Port = 5432 " '. Aber ja danke für den Link zu dem offiziellen Azure-Tutorial zum Verbinden mit Python mit Postgre – Vincent

+0

Ich habe Probleme, über sqlalchemy Verbindung. Ich bin in der Lage, über psycopg2 verbinden, denke ich .. – Vincent

+0

@Vincent Konnten Sie einen neuen Thread für die Problemverbindung über sqlalchemy? –

Verwandte Themen