Rumah > Artikel > pembangunan bahagian belakang > Tidak dapat menyambung ke pangkalan data postgres AWS RDS menggunakan pgx
Editor PHP Zimo menghadapi masalah apabila menggunakan pgx untuk menyambung ke pangkalan data Postgres AWS RDS. Dia mendapati bahawa dia tidak berjaya mewujudkan sambungan, walaupun dia telah mengkonfigurasinya mengikut panduan yang disediakan oleh dokumentasi rasmi dan sumber lain. Dia mencuba pelbagai kaedah, termasuk menyemak kebenaran pangkalan data, mengesahkan sambungan rangkaian, mengubah suai fail konfigurasi, dll., tetapi masalah itu berterusan. Beliau berharap dapat mencari penyelesaian yang berkesan untuk masalah ini.
Saya cuba menyambung ke pangkalan data postgres dalam AWS RDS dalam program Go menggunakan pakej github.com/jackc/pgx/v5
, tetapi saya mendapat ralat berikut:
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
Walaupun adalah ralat untuk menyatakan secara jelas bahawa pangkalan data tidak wujud, saya telah mencipta pangkalan data RDS dan saya boleh menyambung kepadanya melalui pgAdmin juga. Tetapi apabila saya cuba menyambung dalam kod Go, saya mendapat ralat di atas.
Saya menyemak perkara berikut
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()
Mungkin ada sesuatu yang tidak kena di sini. Walaupun dari pgAdmin saya boleh mencipta jadual tetapi tidak boleh menyambung dari kod Go saya.
Masalahnya ialah kerana pangkalan data "golangpg" tidak wujud dalam hos RDS PostgreSQL anda. 94b3e26ee717c64999d7867364b1b4a3
e388a4556c0f65e1904146cc1a846bee<code>RDS标识符!=数据库名称
RDS pengecam! =Nama pangkalan data
Saya mencipta semula persediaan anda di sini:
PostgreSQL RDS
Melaksanakan kod yang sama dan mendapat ralat yang sama:
▶ 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
Sebabnya 数据库“golangdb”不存在
Pangkalan data "golangdb" tidak wujudtidak wujud dalam PostgreSQL RDS saya.
Sambung ke hos pangkalan data dan senaraikan pangkalan data yang tersedia.
▶ 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
Ini juga sebabnya menggunakan dbname := "postgres"
dbname := "postgres" berfungsi, kerana pangkalan data wujud pada mesin hos.
▶ go run main.go Database connection establised to db postgres
Buat pangkalan data baharu
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
Cuba semula kod go
▶ go run main.go Database connection establised to db golangdb
Atas ialah kandungan terperinci Tidak dapat menyambung ke pangkalan data postgres AWS RDS menggunakan pgx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!