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

无法使用 pgx 连接到 postgres 数据库 aws rds

php小编子墨在使用pgx连接到Postgres数据库AWS RDS时遇到了问题。他发现无法成功建立连接,尽管他已经按照官方文档和其他资源提供的指导进行了配置。他尝试了多种方法,包括检查数据库权限、确认网络连接、修改配置文件等,但问题依然存在。他希望能够得到解决这个问题的有效方法。

问题内容

我尝试使用 github.com/jackc/pgx/v5 包在 Go 程序中连接到 AWS RDS 中的 postgres 数据库,但出现以下错误:

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

登录后复制

即使明确指出数据库不存在也是错误,但我已经创建了 RDS 数据库,并且我也可以通过 pgAdmin 连接到该数据库。但是当我尝试在 Go 代码中进行连接时,出现了上述错误。

我检查了以下几点

安全组允许所有流量通过 5432 端口RDS 中启用公共访问能够通过 pgAdmin 连接到同一数据库。

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: %v", err)            os.Exit(1)        } else {            fmt.Println("Database connection establised to db ", dbname)        }            return pgConn    }        var Connection *pgx.Conn = PGConnection()

登录后复制

这里可能有什么错误。即使从 pgAdmin 我也可以创建表,但无法从我的 Go 代码连接。

解决方法

该问题是因为您的 RDS PostgreSQL 主机中不存在 数据库“golangpg”。

RDS标识符!=数据库名称

我在这里重新创建您的设置:

PostgreSQL RDS

执行相同的代码并得到相同的错误:

▶ go run main.goUnable 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

登录后复制

原因是数据库“golangdb”不存在在我的PostgreSQL RDS中不存在。

连接到数据库主机并列出可用的数据库。

▶ psql --host=golangdb.xxxxx.eu-central-1.rds.amazonaws.com --username=postgrespostgres=> 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

登录后复制

这也是使用 dbname := “postgres” 有效的原因,因为数据库存在于主机中。

▶ go run main.goDatabase connection establised to db  postgres

登录后复制

创建新数据库

postgres=> CREATE DATABASE golangdb;CREATE DATABASEpostgres=> 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 代码

▶ go run main.goDatabase connection establised to db  golangdb

登录后复制

以上就是无法使用 pgx 连接到 postgres 数据库 AWS RDS的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2353828.html

(0)
上一篇 2025年3月1日 14:29:13
下一篇 2025年3月1日 14:29:28

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论