连接到运行 PostgreSQL 数据库引擎的数据库实例 - Amazon Relational Database Service

连接到运行 PostgreSQL 数据库引擎的数据库实例

在 Amazon RDS 预置数据库实例后,您可以使用任何标准 SQL 客户端应用程序连接到该实例。在可以连接之前,数据库实例必须是可用且可访问的。是否可以从 VPC 外部连接到实例取决于您创建 Amazon RDS 数据库实例的方式:

  • 如果您将数据库实例创建为公有,VPC 外部的设备和 Amazon EC2 实例便可以连接到您的数据库。

  • 如果您将数据库实例创建为私有,只有 Amazon VPC 内的 Amazon EC2 实例和设备可以连接到您的数据库。

若要检查数据库实例是公有还是私有实例,请使用 AWS Management Console 查看实例的 Connectivity & security(连接和安全性)选项卡。您可以在 Security(安全性)项下找到“公开访问”值,其中“否”表示私有,“是”表示公有。

要详细了解不同的 Amazon RDS 和 Amazon VPC 配置及其如何影响可访问性,请参阅 在 VPC 中访问数据库实例的场景

安装 psql 客户端

要从 EC2 实例连接到您的数据库实例,您可以在 EC2 实例上安装 PostgreSQL 客户端。要在 Amazon Linux 2023 上安装 psql 客户端,请运行以下命令:

sudo dnf install postgresql15

要在 Amazon Linux 2 上安装 psql 客户端,请运行以下命令:

sudo amazon-linux-extras install postgresql14

要在 Ubuntu 上安装 psql 客户端,请运行以下命令:

sudo apt-get install -y postgresql14

查找有关 RDS for PostgreSQL 数据库实例的连接信息

如果数据库实例可用且可访问,则可以通过向 SQL 客户端应用程序提供以下信息进行连接:

  • 数据库实例端点,用作实例的主机名(DNS 名称)。

  • 数据库实例侦听的端口。对于 PostgreSQL,原定设置端口为 5432。

  • 数据库实例的用户名和密码。PostgreSQL 的原定设置“主用户名”是 postgres

  • 数据库的名称和密码(数据库名称)。

要获取这些详细信息,您可以使用 AWS Management Console、AWS CLI describe-db-instances 命令或 Amazon RDS API DescribeDBInstances 操作。

要使用 AWS Management Console 查找端点、端口编号和数据库名称
  1. 登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 打开 RDS 控制台,然后选择 Databases (数据库) 以显示数据库实例的列表。

  3. 选择 PostgreSQL 数据库实例名称以显示其详细信息。

  4. 连接和安全性选项卡上,复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。

    从 RDS 控制台获取端点
  5. Configuration(配置)选项卡中,记下数据库名称。如果您在创建 RDS for PostgreSQL 实例时创建了数据库,就会看到数据库名称下列出的名称。如果您没有创建数据库,则数据库名称将显示破折号 (‐)。

    从 RDS 控制台获取数据库名称

下面是两种连接到 PostgreSQL 数据库实例的方法。第一个示例使用 pgAdmin,这是一个时下受欢迎的用于 PostgreSQL 的开源管理和开发工具。第二个示例使用 psql,这是一个命令行实用工具,包含在 PostgreSQL 安装中。

使用 pgAdmin 连接到 RDS for PostgreSQL 数据库实例

您可以使用开源工具 pgAdmin 连接到 RDS for PostgreSQL 数据库实例。客户端计算机上不必具有 PostgreSQL 的本地实例,即可从 http://www.pgadmin.org/ 下载和使用 pgAdmin。

要使用 pgAdmin 连接到 RDS for PostgreSQL 数据库实例
  1. 在您的客户端计算机上启动 pgAdmin 应用程序。

  2. Dashboard (控制面板) 选项卡上,选择 Add New Server (添加新服务器)。

  3. Create - Server (创建 - 服务器) 对话框中,在 General (常规) 选项卡上键入名称以在 pgAdmin 中标识该服务器。

  4. Connection (连接) 选项卡上,键入您的数据库实例的以下信息:

    • 对于 Host (主机),键入端点,例如 mypostgresql.c6c8dntfzzhgv0.us-east-2.rds.amazonaws.com

    • 对于 Port (端口),键入分配的端口。

    • 对于 Username(用户名),键入您在创建数据库实例时输入的用户名(如果您更改了“主用户名”的默认值,postgres)。

    • 对于 Password (密码),键入您在创建数据库实例时输入的密码。

  5. 选择 Save

    如果您有任何连接问题,请参阅排除与您的 RDS for PostgreSQL 实例的连接故障

  6. 要在 pgAdmin 浏览器中访问数据库,请依次展开 Servers (服务器)、数据库实例和 Databases (数据库)。选择数据库实例的数据库名称。

  7. 要打开可在其中输入 SQL 命令的面板,请依次选择 Tools (工具) 和 Query Tool (查询工具)。

使用 psql 连接到 RDS for PostgreSQL 数据库实例

可使用 psql 命令行实用工具的本地实例连接到 RDS for PostgreSQL 数据库实例。需要在您的客户端计算机上安装 PostgreSQL 或 psql 客户端。

您可以从 PostgreSQL 网站下载 PostgreSQL 客户端。请按照特定于您的操作系统版本的说明安装 psql。

要使用 psql 连接到 RDS for PostgreSQL 数据库实例,您需要提供主机 (DNS) 信息、访问凭证以及数据库名称。

使用以下格式之一连接到 RDS for PostgreSQL 数据库实例。在连接时,系统将提示您输入密码。对于批处理作业或脚本,请使用 --no-password 选项。此选项面向整个会话设置。

注意

如果服务器需要进行密码身份验证,而密码不能从其他来源获取,--no-password 连接尝试则会失败。有关更多信息,请参阅 psql 文档

如果这是您第一次连接到此数据库实例,或者如果您尚未为此 RDS for PostgreSQL 实例创建数据库,则可以使用“主用户名”和密码连接到 postgres 数据库。

对于 Unix,使用以下格式。

psql \ --host=<DB instance endpoint> \ --port=<port> \ --username=<master username> \ --password \ --dbname=<database name>

对于 Windows,使用以下格式。

psql ^ --host=<DB instance endpoint> ^ --port=<port> ^ --username=<master username> ^ --password ^ --dbname=<database name>

例如,以下命令使用虚构的凭证连接到名为 mypgdb 的 PostgreSQL 数据库实例上名为 mypostgresql 的数据库。

psql --host=mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com --port=5432 --username=awsuser --password --dbname=mypgdb

使用 Amazon Web Services(AWS)JDBC 驱动程序连接到 RDS for PostgreSQL

Amazon Web Services(AWS)JDBC 驱动程序已重新设计为高级 JDBC 包装器。此包装器是对现有 JDBC 驱动程序各项功能的补充和扩展。该驱动程序与社区 pgJDBC 驱动程序兼容。

要安装 AWS JDBC 驱动程序,请附加 AWS JDBC 驱动程序.jar 文件(位于应用程序 CLASSPATH 中),并保留对相应社区驱动程序的引用。按如下方式更新相应的连接 URL 前缀:

  • jdbc:postgresql://jdbc:aws-wrapper:postgresql://

有关 AWS JDBC 驱动程序的更多信息及其完整使用说明,请参阅 Amazon Web Services (AWS) JDBC Driver GitHub repository

使用 Amazon Web Services(AWS)Python 驱动程序连接到 RDS for PostgreSQL

Amazon Web Services(AWS)驱动程序设计为高级 Python 包装器。这款包装器是对开源 Psycopg 驱动程序的各项功能的补充和扩展。AWS Python 驱动程序支持 Python 3.8 及更高版本。您可以使用 pip 命令和 psycopg 开源软件包安装 aws-advanced-python-wrapper 程序包。

有关 AWS JDBC 驱动程序的更多信息及其完整使用说明,请参阅 Amazon Web Services(AWS)Python 驱动程序 GitHub 存储库

排除与您的 RDS for PostgreSQL 实例的连接故障

错误 – FATAL:数据库名称不存在

如果在尝试连接时收到 FATAL: database name does not exist 之类的错误,请尝试对 --dbname 选项使用默认数据库名称 postgres

错误 – 无法连接到服务器:连接超时

如果无法连接到数据库实例,则最常见的错误是 Could not connect to server: Connection timed out.如果出现此错误,请检查以下内容:

  • 检查所使用的主机名是否是数据库实例端点,以及所使用的端口号是否正确。

  • 确保将数据库实例的公共可访问性设置为,以允许外部连接。要修改公有访问权限共访问设置,请参阅 修改 Amazon RDS 数据库实例

  • 确保连接到数据库的用户对数据库具有 CONNECT 访问权限。您可以使用以下查询来提供对数据库的连接访问权限。

    GRANT CONNECT ON DATABASE database name TO username;
  • 检查分配给数据库实例的安全组是否具有允许您的连接通过相应防火墙进行访问的规则。例如,如果数据库实例是使用默认端口 5432 创建的,您公司的防火墙规则可能不允许外部公司设备连接到该端口。

    要解决此问题,请修改数据库实例以使用不同的端口。另外,确保应用于数据库实例的安全组允许连接到新端口。要修改数据库端口设置,请参阅 修改 Amazon RDS 数据库实例

  • 另请参阅 安全组访问规则错误

安全组访问规则错误

到目前为止,最常见的连接问题与分配给数据库实例的安全组的访问规则有关。如果在创建数据库实例时使用的是原定设置安全组,则该安全组可能没有允许您访问该实例的访问规则。

要使连接运行,您在创建数据库实例时分配给它的安全组必须允许访问该数据库实例。例如,如果数据库实例是在 VPC 中创建的,则它必须具有授权连接的 VPC 安全组。检查数据库实例是否是使用安全组创建的,而该安全组没有授权来自运行应用程序的设备或 Amazon EC2 实例的连接。

您可以在安全组中添加或编辑入站规则。对于 Source (源),选择 My IP (我的 IP),这允许从浏览器中检测到的 IP 地址访问数据库实例。有关更多信息,请参阅通过创建安全组提供对 VPC 中的数据库实例的访问

或者,如果数据库实例是在 VPC 外部创建的,则它必须具有授权这些连接的数据库安全组。

有关 Amazon RDS 安全组的更多信息,请参阅 使用安全组控制访问权限