Heim > Artikel > Backend-Entwicklung > Es kann keine Verbindung zur Postgres-Datenbank AWS RDS über pgx hergestellt werden
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.
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
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
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()
Hier stimmt möglicherweise etwas nicht. Sogar von pgAdmin aus kann ich die Tabelle erstellen, aber keine Verbindung über meinen Go-Code herstellen.
Das Problem besteht darin, dass die Datenbank „golangpg“ auf Ihrem RDS-PostgreSQL-Host nicht vorhanden ist. 94b3e26ee717c64999d7867364b1b4a3
e388a4556c0f65e1904146cc1a846bee<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
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
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
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
Go-Code erneut versuchen
▶ go run main.go Database connection establised to db golangdb
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!