最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 无法使用 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 代码中进行连接时,出现了上述错误。

    我检查了以下几点

    1. 安全组允许所有流量通过 5432 端口
    2. RDS 中启用公共访问
    3. 能够通过 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: n%vn", 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”。</p>
    <p><code>RDS标识符!=数据库名称

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

    PostgreSQL RDS

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

    ▶ 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

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

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

    ▶ 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

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

    ▶ go run main.go
    Database connection establised to db  postgres

    创建新数据库

    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 代码

    ▶ go run main.go
    Database connection establised to db  golangdb
    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 无法使用 pgx 连接到 postgres 数据库 AWS RDS
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 292稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情