连接数据库

更新时间:2025-04-23 06:37

本文将为您介绍如何连接PolarDB PostgreSQL版集群。

准备工作

在连接数据库集群前,您需要进行以下操作:

  • 获取数据库连接地址与端口

    集中式PolarDB PostgreSQL版集群
    PolarDB PostgreSQL分布式版集群

    集中式PolarDB PostgreSQL版集群指产品版本企业版标准版的集群。

    您可以前往PolarDB控制台,在集群列表中单击目标集群ID进入集群详情页。在数据库连接区域中获取数据库连接地址image

    说明
    • 推荐使用集群地址,且默认端口号为5432。

    • 请根据您的访问环境选择私网公网

      • 如果您是使用ECS访问PolarDB,并且ECS与PolarDB位于同一VPC内,请选择私网

      • 如果您是在本地环境中访问PolarDB,请选择公网。公网地址单击右侧申请即可。

    • 公网即互联网,通过公网访问将无法实现PolarDB集群的最佳性能。

    • 暂不支持使用虚拟主机和轻量应用服务器使用私网地址连接PolarDB集群。

    您可以前往PolarDB控制台,在集群列表中单击目标集群ID进入集群详情页。在数据库连接区域中获取数据库连接地址image

    说明
    • PolarDB PostgreSQL分布式版集群默认仅包含主地址,且默认端口号为5432。

    • 请根据您的访问环境选择私网地址公网地址

      • 如果您是使用ECS访问PolarDB,并且ECS与PolarDB位于同一VPC内,请选择私网地址

      • 如果您是在本地环境中访问PolarDB,请选择公网地址。公网地址单击请点击申请即可。

    • 公网地址即互联网,通过公网地址访问将无法实现PolarDB集群的最佳性能。

    • 暂不支持使用虚拟主机和轻量应用服务器使用私网地址连接PolarDB集群。

  • 创建数据库账号

    您可以前往PolarDB控制台,在集群列表中单击目标集群ID进入集群详情页。在配置与管理 > 账号管理创建数据库账号image

    说明

    数据库账号类型分为高权限账号普通账号,这两种账号的权限存在差异。您可以根据实际业务需求创建相关的数据库账号。

  • 设置集群白名单

    您可以前往PolarDB控制台,在集群列表中单击目标集群ID进入集群详情页。在配置与管理 > 集群白名单中添加IP白名单安全组image

    说明
    • 如果您是使用ECS访问PolarDB,并且ECS与PolarDB位于同一VPC内,您可以选择将ECS的内网IP地址添加至新的IP白名单分组,或将ECS所在的安全组添加至集群白名单中。

    • 如果您是使用ECS访问PolarDB,但ECS与PolarDB不在同一VPC内,您可以选择将ECS的公网IP地址添加至新的IP白名单分组,或将ECS所在的安全组添加至集群白名单中。

    • 如果您是在本地环境中访问PolarDB,请将您本地环境的公网IP地址添加至新的IP白名单分组中。

      本地环境的公网IP地址获取方法如下:Linux操作系统:打开终端,输入curl ifconfig.me命令后回车。

      • Windows操作系统:打开命令提示符,输入curl ip.me命令后回车。

      • macOS操作系统:打开终端,输入curl ifconfig.me命令后回车。

      若您的本地网络环境存在代理等情况,以上方式获取的IP可能并非您的真实公网IP。您可以将IP段0.0.0.0/0添加至PolarDB集群白名单中,成功连接集群后,执行SELECT pid,usename,datname,client_addr,state,query FROM pg_stat_activity WHERE state = 'active';命令获取真实公网IP地址,并将其加入到集群白名单中。随后删除白名单中的IP段0.0.0.0/0

      image

    • IP段0.0.0.0/0表示允许所有的访问源访问集群,将其设置在集群白名单中存在极大的风险,如非必要,切勿将其添加至白名单。

完成准备工作后,您就可以连接数据库集群了。

连接数据库集群

连接数据库集群的方法有很多种,您可以根据实际业务需求来选择适合的连接方式。以下列举了部分连接数据库集群的示例:

使用DMS连接集群
使用客户端连接集群
使用命令行连接集群
使用应用程序连接集群

DMS是阿里云提供的图形化的数据管理工具,它是一种集数据管理、结构管理、用户授权、安全审计、数据趋势、数据追踪、BI图表、性能与优化和服务器管理于一体的数据管理服务。您无需借助其他工具,即可直接在DMS上管理您的PolarDB集群。

  1. 前往PolarDB控制台,在集群列表中单击目标集群ID进入集群详情页。在页面右上角单击登录数据库image

  2. 在弹出的对话框中,输入集群中创建的数据库账号数据库密码,单击登录image

  3. 登录后,您可以在左侧导航栏的数据库实例 > 已登录实例列表中查看到所登录的PolarDB集群,并进行相应的管理操作。image

您可以使用任何通用的客户端连接PolarDB集群。此处pgAdmin 4 v9.0版本为例,其它客户端的操作类似。

  1. 下载并安装pgAdmin 4客户端。

  2. 打开pgAdmin 4客户端,右键单击Servers,选择Register > Server...image

  3. General页设置连接名称,Connection页设置要连接的集群信息,并单击Saveimage

    image

    参数

    说明

    Host name/address

    PolarDB集群的数据库连接地址与端口

    • 如果您是使用ECS访问PolarDB,并且ECS与PolarDB位于同一VPC内,请选择私网地址与端口。

    • 如果您是在本地环境中访问PolarDB,请选择公网地址与端口。

    • 默认端口号为5432

    Port

    Username

    PolarDB集群的数据库账号和密码

    Password

  4. 查看连接结果。若连接信息无误,会出现如下界面,则表示连接成功。image

    说明

    postgres是默认的系统数据库,请勿在该数据库中进行任何操作。

您可以前往PostgreSQL官网网站下载并使用psql工具连接PolarDB数据库集群。您也可以使用PolarDB提供的PolarDB-Tools工具包中的psql工具连接PolarDB数据库集群

说明

语法

psql -h <host> -p <port> -U <username> -d <dbname>

参数

描述

host

PolarDB集群的数据库连接地址与端口

  • 如果您是使用ECS访问PolarDB,并且ECS与PolarDB位于同一VPC内,请选择私网地址与端口。

  • 如果您是在本地环境中访问PolarDB,请选择公网地址与端口。

  • 默认端口号为5432

port

username

PolarDB集群的数据库账号

dbname

需要管理维护的数据库

示例

psql -h pc-xxx.rwlb.rds.aliyuncs.com -p 5432 -U testusername -d postgres

连接PolarDB PostgreSQL版集群的方式与连接其他PostgreSQL数据库的方式一样,仅需将数据库连接地址、端口、账号及密码等进行替换即可。以下为您列举部分开发语言如何通过应用程序访问PolarDB数据库:

Java
Python
Go

此处以Maven项目为例,使用PostgreSQL JDBC驱动连接PolarDB PostgreSQL版集群。

  1. 首先,您需要在pom.xml文件中添加PostgreSQL JDBC驱动的依赖,代码示例:

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.2.18</version>
    </dependency>
  2. 连接集群。请将参数<HOST><PORT><USER><PASSWORD><DATABASE><YOUR_TABLE_NAME><YOUR_TABLE_COLUMN_NAME>进行替换。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    public class PolarDBConnection {
        public static void main(String[] args) {
            // 数据库URL, 用户名, 密码
            String url = "jdbc:postgresql://<HOST>:<PORT>/<DATABASE>";
            String user = "<USER>";
            String password = "<PASSWORD>";
    
            try {
                // 加载JDBC驱动
                Class.forName("org.postgresql.Driver");
                
                // 建立连接
                Connection conn = DriverManager.getConnection(url, user, password);
                
                // 创建Statement对象
                Statement stmt = conn.createStatement();
                
                // 执行SQL查询
                ResultSet rs = stmt.executeQuery("SELECT * FROM <YOUR_TABLE_NAME>");
                
                // 处理结果集
                while (rs.next()) {
                    System.out.println(rs.getString("<YOUR_TABLE_COLUMN_NAME>"));
                }
                
                // 关闭资源
                rs.close();
                stmt.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

此处以Python3为例,使用psycopg2库连接PolarDB PostgreSQL版集群。

  1. 首先,您需要安装psycopg2库。如果您还没有安装,可以通过以下命令进行安装:

    pip3 install psycopg2-binary
  2. 连接集群。请将参数<HOST><PORT><USER><PASSWORD><DATABASE><YOUR_TABLE_NAME>进行替换。

    import psycopg2
    
    try:
        # 连接参数
        conn = psycopg2.connect(
            host="<HOST>",  # 数据库主机地址
            database="<DATABASE>",  # 数据库名称
            user="<USER>",  # 用户名
            password="<PASSWORD>",  # 密码
            port="<PORT>"  # 端口
        )
    
        # 创建游标对象
        cursor = conn.cursor()
    
        # 执行查询
        cursor.execute("SELECT * FROM <YOUR_TABLE_NAME>")
    
        # 获取所有结果
        records = cursor.fetchall()
        for record in records:
            print(record)
            
    except Exception as e:
        print("错误:", e)
    finally:
        # 关闭连接
        if 'cursor' in locals():
            cursor.close()
        if 'conn' in locals():
            conn.close()

此处以go1.23.0为例,使用database/sql包和lib/pq驱动来连接PolarDB PostgreSQL版集群。

  1. 首先,您需要安装lib/pq驱动。您可以通过以下命令进行安装:

    go get -u github.com/lib/pq
  2. 连接集群。请将参数<HOST><PORT><USER><PASSWORD><DATABASE><YOUR_TABLE_NAME>进行替换。

    package main
    
    import (
        "database/sql"
        "fmt"
        "log"
    
        _ "github.com/lib/pq" // 初始化驱动
    )
    
    func main() {
        // 连接字符串格式
        connStr := "user=<USER> password=<PASSWORD> dbname=<DATABASE> host=<HOST> port=<PORT> sslmode=disable"
    
        // 打开数据库连接
        db, err := sql.Open("postgres", connStr)
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close() // 程序退出前关闭连接
    
        // 测试连接是否成功
        err = db.Ping()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("Connected to PostgreSQL!")
    
        // 执行查询示例
        rows, err := db.Query("SELECT * FROM <YOUR_TABLE_NAME>")
        if err != nil {
            log.Fatal(err)
        }
        defer rows.Close()
    }
    

常见问题

ECS无法连接PolarDB集群

请您按以下步骤进行排查:

  1. 检查PolarDB集群的运行状态是否为运行中

  2. 检查数据库连接地址、端口、账号及密码是否正确。更多信息,请参见获取数据库连接地址与端口

  3. 检查网络因素,您可以在ECS内执行ping 数据库连接地址telnet 数据库连接地址 端口来测试网络连通性。

    1. 若您使用的是私网地址:

      1. 检查ECS与PolarDB集群是否位于同一VPC下。若不在同一VPC下,则无法使用私网地址。您可以使用以下任意一种解决方法使ECS与PolarDB集群位于同一VPC下:

      2. 检查ECS的私网IP地址、IP段或安全组是否已添加至集群白名单

    2. 若您使用的是公网地址,检查ECS的公网IP地址或安全组是否已添加至集群白名单

说明

暂不支持使用虚拟主机和轻量应用服务器使用私网地址连接PolarDB集群。

本地环境无法连接PolarDB集群

请您按以下步骤进行排查:

  1. 检查PolarDB集群的运行状态是否为运行中

  2. 检查数据库连接地址、端口、账号及密码是否正确。更多信息,请参见获取数据库连接地址与端口

    说明

    数据库连接地址需为公网地址。若您使用的是ECS并与PolarDB集群位于同一VPC下,可以使用私网地址。

  3. 检查网络因素,您可以在本地环境执行ping <数据库连接地址>telnet <数据库连接地址> <端口>来测试网络连通性。

  4. 检查本地环境的公网IP地址或IP段是否已添加至集群白名单

    本地环境的公网IP地址获取方法如下:Linux操作系统:打开终端,输入curl ifconfig.me命令后回车。

    • Windows操作系统:打开命令提示符,输入curl ip.me命令后回车。

    • macOS操作系统:打开终端,输入curl ifconfig.me命令后回车。

    若您的本地网络环境存在代理等情况,以上方式获取的IP可能并非您的真实公网IP。您可以将IP段0.0.0.0/0添加至PolarDB集群白名单中,成功连接集群后,执行SELECT pid,usename,datname,client_addr,state,query FROM pg_stat_activity WHERE state = 'active';命令获取真实公网IP地址,并将其加入到集群白名单中。随后删除白名单中的IP段0.0.0.0/0

    image

无法连接PolarDB集群,报错:Password authentication failed for user

数据库账号或密码错误,请检查您是否输入正确。您可以前往PolarDB控制台,在配置与管理 > 账号管理中管理数据库账号和密码。

无法连接PolarDB集群,报错:Name or service not known

数据库连接地址错误,请检查您是否输入正确,正确格式为pc-xxx.xxx.rds.aliyuncs.com。您可以前往PolarDB控制台,在基本信息 > 数据库连接中管理您的数据库连接地址。

无法连接PolarDB集群,报错:Connection timed out

可能是您当前环境的公网IP地址或IP段未被添加至PolarDB集群的白名单中,或您填写的公网IP地址或IP段存在错误。

本地环境的公网IP地址获取方法如下:Linux操作系统:打开终端,输入curl ifconfig.me命令后回车。

  • Windows操作系统:打开命令提示符,输入curl ip.me命令后回车。

  • macOS操作系统:打开终端,输入curl ifconfig.me命令后回车。

若您的本地网络环境存在代理等情况,以上方式获取的IP可能并非您的真实公网IP。您可以将IP段0.0.0.0/0添加至PolarDB集群白名单中,成功连接集群后,执行SELECT pid,usename,datname,client_addr,state,query FROM pg_stat_activity WHERE state = 'active';命令获取真实公网IP地址,并将其加入到集群白名单中。随后删除白名单中的IP段0.0.0.0/0

image

如何在DMS中将连接方式修改为使用集群地址连接PolarDB集群

若您使用DMS连接集群,由于DMS默认使用主地址连接集群。如果因业务需求需要将连接方式修改为使用集群地址连接PolarDB集群,请参考以下操作。

  1. 通过DMS连接集群后,在左侧导航栏的数据库实例 > 已登录实例列表中,选择目标集群,单击右键选择编辑实例

    image

  2. 在编辑实例弹窗中,将基本信息 > 录入方式修改为连接串地址,并填入集群的集群地址。单击保存image

重要

修改完成后,由于原SQL窗口使用的是主地址连接集群,因此在修改连接串地址后,请关闭原SQL窗口,并重新打开一个新的SQL窗口执行SQL。

相关文档

  • 本页导读 (1)
  • 准备工作
  • 连接数据库集群
  • 常见问题
  • ECS无法连接PolarDB集群
  • 本地环境无法连接PolarDB集群
  • 无法连接PolarDB集群,报错:Password authentication failed for user
  • 无法连接PolarDB集群,报错:Name or service not known
  • 无法连接PolarDB集群,报错:Connection timed out
  • 如何在DMS中将连接方式修改为使用集群地址连接PolarDB集群
  • 相关文档
文档反馈