腾讯云云数据库PostgreSQL完全对接指南:从开通到生产级应用
1. 云数据库PostgreSQL概述
腾讯云云数据库PostgreSQL(TencentDB for PostgreSQL)是腾讯云基于开源PostgreSQL打造的企业级关系型数据库服务。它具备自动备份、监控告警、弹性扩容、只读实例、安全组隔离等全套能力,让开发者无需关心底层运维,即可享受高性能、高可用的数据库服务。
PostgreSQL作为世界上最先进的开源关系型数据库之一,以其强大的ACID事务支持、丰富的数据类型与扩展能力、强大的索引功能以及高度可扩展性而闻名。腾讯云在此基础上进行了深度优化,提供了双机高可用架构、自动故障切换、定期备份等企业级特性。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
2. 创建PostgreSQL实例
2.1 实例创建流程
在使用云数据库PostgreSQL之前,首先需要完成实例的创建。登录腾讯云控制台后,在数据库分类下找到云数据库PostgreSQL,点击创建实例。
创建过程中需要配置以下关键参数:
- 数据库版本:目前支持PostgreSQL 10到17等多个大版本。建议选择较新版本以获得更好的性能和更多特性支持,腾讯云已于2025年全面支持PostgreSQL 17.0。
- 地域与可用区:选择与业务服务器相同的地域,以降低网络延迟。
- 实例规格:包括CPU与内存配置。腾讯云提供从1核2GB到90核720GB的多种规格选择。通用型规格覆盖1core 2GiB到90core 720GiB,磁盘容量支持10GB至8000GB。
- 存储空间:根据业务数据量预估选择合适的存储大小,注意当实例实际使用容量超出已购买容量时,实例将被自动锁定,只能进行读操作无法写入。
- 网络类型:建议选择私有网络VPC,将数据库部署在与业务服务器相同的VPC内。
2.2 计费模式选择
腾讯云PostgreSQL支持按量计费和包年包月两种计费模式。按量计费适合短期测试或业务波动较大的场景,包年包月适合长期稳定运行的生产环境,价格更具优势。
3. 网络连接配置
腾讯云PostgreSQL提供两种连接方式:内网连接和外网连接。
3.1 内网连接(推荐)
内网连接是指通过同一VPC内的云服务器CVM访问数据库的内网地址。这种方式的优势在于:
- 使用内网高速网络,延迟极低(通常在1ms以内)
- 数据传输不走公网,安全性更高
- 不产生额外的外网流量费用
建议将CVM和数据库部署在同一账号、同一地域、同一VPC内。如果CVM和数据库处于不同的VPC下,可以通过对等连接或云联网实现内网互通。
创建完成后,系统会自动分配一个内网地址(VIP)和端口(默认为5432)。该VIP通过接入网关集群统一访问数据库实例,即使发生主机故障或主备切换,内网IP也不会发生变化。
3.2 外网连接
外网连接适用于开发测试或辅助管理场景,不推荐用于正式业务访问。开启外网地址后,数据库服务将暴露在公网上,存在被攻击的风险。
目前仅广州、上海、北京、成都、中国香港、硅谷等地域支持开启外网访问。开启方式为:在实例详情页的基本信息区域,单击外网IPv4地址后的开启按钮。开启外网后,必须配置安全组规则才能正常访问。
需要注意的是,外网访问不纳入SLA可用性保障,且外网IP可能因规格调整或网络升级而发生变化,建议使用外网域名而非IP进行访问。
4. 客户端连接方式
4.1 使用psql命令行工具(Linux)
psql是PostgreSQL官方自带的命令行客户端,是在Linux环境下最常用的连接方式。
首先需要在Linux云服务器上安装PostgreSQL客户端:
yum install -y postgresql.x86_64安装完成后,执行以下命令连接数据库:
psql -U 用户名 -h 访问地址 -p 端口 -d postgres参数说明:
-U:数据库用户名,使用初始化实例时设置的管理员用户名-h:访问地址,内网连接使用内网地址,外网连接使用外网地址-p:端口号,默认为5432-d:数据库名称,postgres为默认数据库
如果是在与数据库同VPC的CVM中,访问地址可直接使用数据库内网地址进行访问。
4.2 使用pgAdmin图形化工具(Windows)
pgAdmin是PostgreSQL官方推荐的图形化管理工具。连接步骤如下:
- 下载并安装pgAdmin客户端
- 在pgAdmin上方选择Object > Create > Server
- 在对话框中填写名称、主机IP地址、端口号、用户名和密码
- 单击Save完成连接
主机IP地址和端口号可在PostgreSQL控制台实例详情页中的内网地址或外网地址查看。用户名和密码使用初始化实例时设置的数据库管理员账号与密码,如忘记密码可在控制台的账号管理页重置。
4.3 使用DMC数据库管理工具
DMC(Database Management Center)是腾讯云提供的一款数据库管理工具,集库表级操作、实时监控、实例会话管理、SQL窗口、数据管理于一体。DMC的最大优势在于无需安装任何客户端软件,直接在浏览器中即可完成数据库的全生命周期管理,且目前免费使用。
使用DMC连接数据库的步骤:在腾讯云控制台找到目标实例,在登录实例页面选择DMC方式登录。
5. 数据迁移与同步
5.1 使用DTS数据传输服务
除了使用传统的pg_dump和pg_restore方法进行数据导入导出之外,腾讯云数据库提供了数据传输服务DTS以支持数据迁移上云以及云上实例数据迁移的功能。
DTS支持以下迁移场景:
- 云下自建PostgreSQL迁移至腾讯云数据库
- 其他云厂商的PostgreSQL数据库迁移至腾讯云数据库
- 云上CVM或容器等自建的PostgreSQL迁移至腾讯云数据库
- 腾讯云数据库PostgreSQL之间的迁移
- 跨账号数据库迁移
- TDSQL-C PostgreSQL版与云数据库PostgreSQL数据互相迁移
DTS支持PostgreSQL 10及之后的所有版本互相跨版本迁移,如PostgreSQL 10迁移至PostgreSQL 12,PostgreSQL 14迁移至PostgreSQL 11。PostgreSQL 9.4、9.5、9.6版本可通过源端安装插件的形式支持作为源数据库进行全量+增量迁移。
5.2 DTS迁移注意事项
在执行数据迁移时,需要注意以下事项:
- DTS在执行全量数据迁移时会占用一定源端实例资源,可能导致源实例负载上升
- 建议在业务低峰期进行迁移
- 迁移速率受源端读取性能、网络带宽、目标端规格性能等因素影响
- 迁移并发度由目标端实例规格的核心数决定
- 相互关联的数据对象需要同时迁移,否则会导致迁移失败
- CVM自建实例迁移不支持跨地域迁移
- 迁移类型选择全量+增量迁移时,源数据库中的表必须有主键
- 增量迁移时源库wal_level参数值必须为logical
- 目标库的可用空间须是源库待迁移实例的1.2倍以上
5.3 使用pg_dump和pg_restore
对于小规模数据或不需要增量同步的场景,可以使用PostgreSQL自带的pg_dump和pg_restore工具进行数据导入导出。
导出数据:
pg_dump -h 源数据库地址 -p 端口 -U 用户名 -d 数据库名 > backup.sql导入数据:
psql -h 目标数据库地址 -p 端口 -U 用户名 -d 数据库名 < backup.sql6. 高可用与读写分离
6.1 主实例与高可用架构
云数据库PostgreSQL默认支持双机高可用一主一从架构。主实例是可读可写的实例,采用高可用版架构。当主实例发生故障时,系统会自动切换到备实例,保证服务的连续性。
6.2 只读实例
只读实例是仅提供读功能的实例,采用单节点只读架构。只读实例无法单独存在,必须隶属于某个主实例,唯一数据来源是从主实例同步数据。只读实例只能与主实例同地域。
默认允许单主实例创建6个只读实例,如需创建超过此数量的只读实例,可通过在线支持申请。
主实例可挂载只读实例,实现读写分离的功能。读写分离可以将读请求分流到只读实例,减轻主实例的读压力,提升整体性能。
6.3 只读实例组
只读实例无高可用能力,建议使用只读实例组。只读组中只有一个只读实例的情况会存在单点风险,且此只读组不会计入云数据库PostgreSQL服务的整体可用性计算中。单个只读实例不提供可用性SLA保证,建议只读组中至少选购2个只读实例,来保证只读组的可用性。
7. 监控与告警
7.1 核心监控指标
腾讯云PostgreSQL提供丰富的监控指标,包括:
- CPU利用率
- 内存使用率
- 磁盘使用率
- QPS/TPS
- 连接数
- 慢查询数量
这些指标可在实例管理页面的实例监控模块查看。
7.2 进程监控视图
腾讯云PostgreSQL提供业界领先的数据库进程监控视图tencentdb_process_system_usage,应用可实时检测多租户进程的CPU和内存使用详情,从而判断租户当前的健康度等情况。
7.3 告警配置
可以针对关键指标配置告警策略,当指标超过阈值时通过短信、邮件等方式通知运维人员。建议对CPU利用率、内存使用率、磁盘使用率、连接数等核心指标配置告警,特别是磁盘使用率,避免因磁盘满导致数据库被锁定。
8. 性能调优
8.1 pg_stat_statements插件
pg_stat_statements模块提供一种方法追踪一个服务器所执行的所有SQL语句的执行统计信息。该模块必须通过在postgresql.conf的shared_preload_libraries中增加pg_stat_statements来载入,因为它需要额外的共享内存。增加或移除该模块需要服务器重启才能生效。
开启pg_stat_statements后,可以通过查询pg_stat_statements视图获取SQL执行次数、执行时间、返回行数等统计信息。这对于定位慢查询和优化数据库性能非常有帮助。
安装pg_stat_statements插件:
CREATE EXTENSION pg_stat_statements;8.2 SQL限流
当多租户中某些场景占用资源过多需要限制时,可以使用SQL限流能力,可基于SQL语句或者queryid去限制SQL的实时并发。获取SQL语句的query_id可通过查询pg_stat_statements或pg_stat_activity得到。
查看当前活跃查询的query_id示例:
SELECT datname, usename, client_addr, state, query_id, query
FROM pg_stat_activity
WHERE usename='dbadmin'
LIMIT 10;8.3 数据库资源隔离
在多租户共享资源的场景中,腾讯云PostgreSQL提供database资源隔离能力,可以精确地控制租户使用的CPU资源。如需开启database资源隔离模式,可提交工单联系腾讯云开启tencentdb_serverless插件并设置相关参数。
9. 安全管理
9.1 安全组配置
安全组用于配置IP白名单,控制哪些IP地址可以访问数据库实例。开启外网访问后,必须配置安全组规则才能正常访问。
配置安全组时,建议遵循最小权限原则,只开放业务必需的IP地址和端口。
9.2 账号权限管理
云数据库PostgreSQL支持通过控制台的账号管理功能进行用户管理和权限分配。可以创建不同权限级别的数据库账号,分配给不同的应用程序或开发人员使用。
9.3 备份与恢复
云数据库PostgreSQL默认支持自动备份和手动备份。自动备份包括全量备份和增量备份,支持按时间点恢复(PITR)。当数据出现严重问题时,能快速恢复到某个正常时间点。
备份功能可通过控制台的备份恢复模块进行管理。
9.4 审计功能
腾讯云PostgreSQL同时支持极速版和精细版两种审计模式。极速版能满足一般审计需求,而精细版使用pgaudit插件并加以优化,增加了执行函数内容、对象类型、对象名的审计。
10. 高级特性
10.1 冷热数据分离
腾讯云PostgreSQL提供两种冷热数据分离方案:
- cos_fdw插件:用户无需关心不同存储介质的访问形式,通过cos_fdw插件就可以将COS中的数据加载到PostgreSQL数据库表中,像访问普通表一样访问COS中的数据,实现冷热存储分离。
- starocks_fdw插件:引入StarRocks的分析能力,冷数据可以存储在StarRocks本地或者对象存储上,轻松实现TP和AP的连接。
10.2 跨库访问
云数据库PostgreSQL支持跨库访问功能。使用步骤如下:
- 使用CREATE EXTENSION语句安装所需插件
- 为每个需要连接的远程数据库创建外部服务器对象并创建链接映射
- 使用对应命令访问外部表以获取数据
10.3 AI能力集成
腾讯云PostgreSQL(PostgreSQL 17版本)支持AI相关功能,可通过tencentdb_ai插件在SQL内直接对慢查询进行AI分析。云数据库PostgreSQL可与CloudBase深度集成,实现前端直连、云函数、AI能力的全栈应用开发。
11. 多语言编程连接示例
11.1 Python连接示例(psycopg2)
psycopg2是Python中最成熟的PostgreSQL适配器,提供了高性能和稳定的连接,支持事务处理和高级功能。
import psycopg2
# 连接配置
conn = psycopg2.connect(
host='内网地址或外网地址',
port=5432,
database='数据库名',
user='用户名',
password='密码'
)
# 创建游标
cur = conn.cursor()
# 执行查询
cur.execute('SELECT version()')
version = cur.fetchone()
print(f'PostgreSQL版本: {version[0]}')
# 关闭连接
cur.close()
conn.close()11.2 Java连接示例(JDBC)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class PostgreSQLConnection {
public static void main(String[] args) {
String url = "jdbc:postgresql://内网地址:5432/数据库名";
String user = "用户名";
String password = "密码";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT version()")) {
if (rs.next()) {
System.out.println("PostgreSQL版本: " + rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}11.3 Node.js连接示例(pg模块)
const { Client } = require('pg');
const client = new Client({
host: '内网地址或外网地址',
port: 5432,
database: '数据库名',
user: '用户名',
password: '密码'
});
client.connect()
.then(() => client.query('SELECT version()'))
.then(res => {
console.log('PostgreSQL版本:', res.rows[0].version);
})
.catch(err => console.error('连接错误:', err))
.finally(() => client.end());12. 常见问题与解答
Q1: 云数据库PostgreSQL支持哪些版本?
腾讯云云数据库PostgreSQL目前支持PostgreSQL 10到17等多个大版本。用户可在创建实例时选择所需的版本,也支持使用大版本升级能力升级至最新的PostgreSQL 17.0。
Q2: 内网连接和外网连接有什么区别?
内网连接通过同一VPC内的内网地址访问,延迟低(通常在1ms以内)、安全性高、不产生外网流量费用。外网连接通过公网地址访问,存在安全风险且不纳入SLA保障。生产环境强烈推荐使用内网连接。
Q3: 如何实现读写分离?
通过为主实例创建只读实例来实现读写分离。主实例处理写请求,只读实例处理读请求。默认允许单主实例创建6个只读实例。建议至少创建2个只读实例组成只读组以保证可用性。
Q4: DTS数据迁移时有哪些注意事项?
主要注意事项包括:在业务低峰期进行迁移;全量+增量迁移时源表必须有主键;增量迁移时源库wal_level必须为logical;目标库空间须为源库的1.2倍以上;CVM自建实例不支持跨地域迁移。
Q5: 如何监控和优化数据库性能?
可通过控制台监控面板查看CPU、内存、磁盘、连接数等核心指标。开启pg_stat_statements插件追踪SQL执行统计信息。使用tencentdb_process_system_usage监控进程资源使用。针对慢查询配置SQL限流规则。
Q6: 数据库磁盘满了怎么办?
当实例实际使用容量超出已购买容量时,实例将被自动锁定,只能进行读操作无法写入。解决方法包括:扩容存储空间、清理过期数据、将冷数据迁移至COS等对象存储。建议提前配置磁盘使用率告警,防患于未然。




