Heim > Backend-Entwicklung > Golang > Es kann keine Verbindung zur Postgres-Datenbank AWS RDS über pgx hergestellt werden

Es kann keine Verbindung zur Postgres-Datenbank AWS RDS über pgx hergestellt werden

王林
Freigeben: 2024-02-14 14:03:07
nach vorne
1081 Leute haben es durchsucht

无法使用 pgx 连接到 postgres 数据库 AWS RDS

PHP-Editor Zimo ist auf ein Problem gestoßen, als er pgx zum Herstellen einer Verbindung zur Postgres-Datenbank AWS RDS verwendete. Er stellte fest, dass es ihm nicht gelang, eine Verbindung herzustellen, obwohl er sie gemäß den Anweisungen in der offiziellen Dokumentation und anderen Ressourcen konfiguriert hatte. Er versuchte verschiedene Methoden, darunter das Überprüfen von Datenbankberechtigungen, das Bestätigen von Netzwerkverbindungen, das Ändern von Konfigurationsdateien usw., aber das Problem bestand immer noch. Er hofft, eine wirksame Lösung für dieses Problem zu finden.

Frageninhalt

Ich habe versucht, in einem Go-Programm mit dem Paket github.com/jackc/pgx/v5 eine Verbindung zu einer Postgres-Datenbank in AWS RDS herzustellen, habe aber die folgende Fehlermeldung erhalten:

failed to connect to `host=xxxxx.xxxxxxx.us-east-1.rds.amazonaws.com user=golangpg database=golangpg`: server error (FATAL: database "golangpg" does not exist (SQLSTATE 3D000))
exit status 1
Nach dem Login kopieren

Auch wenn es ein Fehler ist, explizit anzugeben, dass die Datenbank nicht existiert, habe ich die RDS-Datenbank erstellt und kann mich auch über pgAdmin mit ihr verbinden. Aber wenn ich versuche, eine Verbindung im Go-Code herzustellen, erhalte ich die obige Fehlermeldung.

Ich habe die folgenden Punkte überprüft

  1. Sicherheitsgruppe lässt den gesamten Datenverkehr über Port 5432 zu
  2. Öffentlicher Zugriff in RDS aktiviert
  3. Möglichkeit, über pgAdmin eine Verbindung zur gleichen Datenbank herzustellen.
package database
    
    import (
        "context"
        "fmt"
        "os"
        "strconv"
    
        "github.com/jackc/pgx/v5"
        "github.com/joho/godotenv"
    )
    
    func PGConnection() *pgx.Conn {
        envErr := godotenv.Load()
        if envErr != nil {
            fmt.Println("Error in loading .env file, ", envErr)
        }
    
        host := os.Getenv("DB_URL")
        port := os.Getenv("DB_PORT")
        user := os.Getenv("DB_USERNAME")
        password := os.Getenv("DB_PASSWORD")
        dbname := os.Getenv("DB_NAME")
    
        portInt, er := strconv.Atoi(port)
        if er != nil {
            fmt.Println("Error in converting string to number", er)
        }
    
        var err error
    
        pgConnString := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=require", host, portInt, user, password, dbname)
    
        pgConn, err := pgx.Connect(context.Background(), pgConnString)
    
        if err != nil {
            fmt.Printf("Unable to connection to database: \n%v\n", err)
            os.Exit(1)
        } else {
            fmt.Println("Database connection establised to db ", dbname)
        }
    
        return pgConn
    }
    
    var Connection *pgx.Conn = PGConnection()
Nach dem Login kopieren

Hier stimmt möglicherweise etwas nicht. Sogar von pgAdmin aus kann ich die Tabelle erstellen, aber keine Verbindung über meinen Go-Code herstellen.

Problemumgehung

Das Problem besteht darin, dass die Datenbank „golangpg“ auf Ihrem RDS-PostgreSQL-Host nicht vorhanden ist. </p> <p><code>RDS标识符!=数据库名称RDS-Kennung! =Datenbankname

<小时/>

Ich erstelle hier dein Setup nach:

PostgreSQL RDS

Den gleichen Code ausführen und den gleichen Fehler erhalten:

▶ go run main.go
Unable to connection to database: 
failed to connect to `host=golangdb.xxxx.eu-central-1.rds.amazonaws.com user=postgres database=golangdb`: server error (FATAL: database "golangdb" does not exist (SQLSTATE 3D000))
exit status 1
Nach dem Login kopieren

Der Grund ist: 数据库“golangdb”不存在Datenbank „golangdb“ existiert nicht existiert nicht in meinem PostgreSQL-RDS.

Stellen Sie eine Verbindung zum Datenbankhost her und listen Sie die verfügbaren Datenbanken auf.

▶ psql --host=golangdb.xxxxx.eu-central-1.rds.amazonaws.com --username=postgres

postgres=> \l
                                                       List of databases
   Name    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype     
-----------+----------+----------+-----------------+-------------+-------------
 postgres  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 
 rdsadmin  | rdsadmin | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8
Nach dem Login kopieren

Dies ist auch der Grund, warum die Verwendung von dbname := "postgres"dbname := "postgres" funktioniert, da die Datenbank auf dem Host-Computer vorhanden ist.

▶ go run main.go
Database connection establised to db  postgres
Nach dem Login kopieren

Neue Datenbank erstellen

postgres=> CREATE DATABASE golangdb;
CREATE DATABASE
postgres=> \l
                                                       List of databases
   Name    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    
-----------+----------+----------+-----------------+-------------+-------------
 golangdb  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 
 postgres  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 
 rdsadmin  | rdsadmin | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8
Nach dem Login kopieren

Go-Code erneut versuchen

▶ go run main.go
Database connection establised to db  golangdb
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEs kann keine Verbindung zur Postgres-Datenbank AWS RDS über pgx hergestellt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage