L'éditeur PHP Zimo a rencontré un problème lors de l'utilisation de pgx pour se connecter à la base de données Postgres AWS RDS. Il a constaté qu'il ne parvenait pas à établir une connexion, même s'il l'avait configurée conformément aux instructions fournies par la documentation officielle et d'autres ressources. Il a essayé diverses méthodes, notamment la vérification des autorisations de la base de données, la confirmation des connexions réseau, la modification des fichiers de configuration, etc., mais le problème persistait. Il espère trouver une solution efficace à ce problème.
J'ai essayé de me connecter à une base de données postgres dans AWS RDS dans un programme Go à l'aide du package github.com/jackc/pgx/v5
, mais j'ai eu l'erreur suivante :
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
Même si c'est une erreur d'indiquer explicitement que la base de données n'existe pas, j'ai créé la base de données RDS et je peux également m'y connecter via pgAdmin. Mais lorsque j'essaie de me connecter en code Go, j'obtiens l'erreur ci-dessus.
J'ai vérifié les points suivants
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()
Il y a peut-être quelque chose qui ne va pas ici. Même depuis pgAdmin, je peux créer la table mais je ne peux pas me connecter depuis mon code Go.
Le problème est dû au fait que la base de données "golangpg" n'existe pas dans votre hôte RDS PostgreSQL. </p>
<p><code>RDS标识符!=数据库名称
Identifiant RDS ! =Nom de la base de données
Je recrée votre configuration ici :
PostgreSQL RDS
Exécuter le même code et obtenir la même erreur :
▶ 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
La raison est que 数据库“golangdb”不存在
La base de données "golangdb" n'existe pas n'existe pas dans mon RDS PostgreSQL.
Connectez-vous à l'hôte de la base de données et répertoriez les bases de données disponibles.
▶ 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
C'est aussi pourquoi l'utilisation de dbname := "postgres"
dbname := "postgres" fonctionne, puisque la base de données existe sur la machine hôte.
▶ go run main.go Database connection establised to db postgres
Créer une nouvelle base de données
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
Réessayez le code
▶ go run main.go Database connection establised to db golangdb
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!