腾讯云云数据库PostgreSQL完全对接指南:从开通到生产级应用
1. 云数据库PostgreSQL概述与实例创建
腾讯云云数据库PostgreSQL(TencentDB for PostgreSQL)是腾讯云基于开源PostgreSQL打造的一款企业级关系型数据库服务。它具备自动备份、监控告警、弹性扩容、只读实例、安全组隔离等全套能力,让开发者无需关心底层运维,即可享受高性能、高可用的数据库服务。
在使用之前,首先需要完成实例的创建。登录腾讯云控制台后,在数据库分类下找到云数据库PostgreSQL,点击创建实例。创建过程中需要选择数据库版本(目前支持PostgreSQL 10到17等多个大版本)、地域与可用区、实例规格(CPU与内存)、存储空间大小以及网络类型。网络类型建议选择私有网络VPC,将数据库部署在与你业务服务器相同的VPC内,以便利用内网高速通道进行低延迟访问。创建完成后,系统会自动分配一个内网地址(VIP)和端口(默认为5432),该VIP通过接入网关集群统一访问数据库实例,即使发生主机故障或主备切换,内网IP也不会发生变化。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
2. 网络连接方式:内网与外网
腾讯云PostgreSQL提供两种连接方式:内网连接和外网连接。
2.1 内网连接(推荐)
内网连接是指通过同一VPC内的云服务器CVM访问数据库的内网地址。这种方式的优势在于:使用内网高速网络,延迟极低(通常在1ms以内);数据传输不走公网,安全性更高;不产生额外的外网流量费用。建议将CVM和数据库部署在同一账号、同一地域、同一VPC内。如果CVM和数据库处于不同的VPC下,可以通过对等连接或云联网实现内网互通。
2.2 外网连接
外网连接适用于开发测试或辅助管理场景,不推荐用于正式业务访问。开启外网地址后,数据库服务将暴露在公网上,存在被攻击的风险。目前仅广州、上海、北京、成都、中国香港、硅谷等地域支持开启外网访问。开启方式为:在实例详情页的基本信息区域,单击外网IPv4地址后的开启按钮。开启外网后,必须配置安全组规则才能正常访问。需要注意的是,外网访问不纳入SLA可用性保障,且外网IP可能因规格调整或网络升级而发生变化,建议使用外网域名而非IP进行访问。
3. 客户端连接方式
3.1 使用psql命令行工具(Linux)
psql是PostgreSQL官方自带的命令行客户端,是在Linux环境下最常用的连接方式。首先需要在Linux云服务器上安装PostgreSQL客户端:
yum install -y postgresql.x86_64安装完成后,执行以下命令登录至PostgreSQL数据库:
psql -U 用户名 -h 访问地址 -p 端口 -d postgres如果是在与数据库同VPC的CVM中,"访问地址"可直接使用数据库内网地址进行访问;如果是使用互联网中的Linux服务器,则"访问地址"需要使用数据库外网地址进行访问。用户名和密码使用初始化实例时设置的数据库管理员用户名与密码,如忘记密码,可在控制台的账号管理页重置密码。
3.2 使用pgAdmin图形化工具(Windows/Linux/macOS)
pgAdmin是PostgreSQL最流行的开源图形化管理工具。在Windows CVM实例或本地下载并安装pgAdmin后,在pgAdmin上方选择Object > Create > Server。在Create - Server对话框中,填写名称、主机IP地址、端口号、用户名和密码等信息后单击Save。主机IP地址和端口号可在PostgreSQL控制台实例详情页中的内网地址或外网地址查看。登录数据库后,在左侧导航选择Databases > postgres,即可看到连接好的服务器(数据库实例)。
4. 编程语言对接实践
4.1 Python连接(psycopg2)
psycopg2是Python最成熟的PostgreSQL适配器,提供了连接数据库、执行SQL查询和处理结果的功能。首先安装psycopg2库:
pip install psycopg2-binary连接示例代码:
import psycopg2
conn = psycopg2.connect(
host="your_host",
port="5432",
database="your_database",
user="your_username",
password="your_password"
)
cur = conn.cursor()
cur.execute("SELECT version()")
version = cur.fetchone()
print(version)
cur.close()
conn.close()执行数据操作时,建议使用参数化查询防止SQL注入,并使用commit()提交事务,发生错误时使用rollback()回滚事务以保持数据库一致性。
4.2 Java连接(JDBC)
Java应用通过JDBC连接PostgreSQL,需要引入PostgreSQL JDBC驱动。Maven依赖:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>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://your_host:5432/your_database";
String user = "your_username";
String password = "your_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(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}生产环境建议使用连接池(如HikariCP)管理数据库连接,并启用SSL/TLS协议确保数据传输安全。
4.3 Node.js连接(pg库)
Node.js通过pg库连接PostgreSQL。安装依赖:
npm install pg连接示例:
const { Client } = require('pg');
const client = new Client({
host: 'your_host',
port: 5432,
database: 'your_database',
user: 'your_username',
password: 'your_password'
});
client.connect();
client.query('SELECT version()', (err, res) => {
if (err) throw err;
console.log(res.rows[0]);
client.end();
});生产环境推荐使用连接池(Pool)管理连接,以提升并发处理能力。
5. 性能优化与内核参数调优
5.1 syscache/relcache自动缓存淘汰
在大规模复杂业务场景下,进程长连接打开大量表、索引等,会导致syscache和relcache缓存压力巨大,进而内存占用过高或缓存命中率下降。云数据库PostgreSQL支持基于LRU(Least Recently Used)的syscache和relcache缓存淘汰机制。系统能够动态识别和淘汰长时间未被访问的关系缓存,优先保留热点元数据缓存,降低内存占用。
相关参数说明:
- tencentdb_syscache_max_num:一个进程最多拥有的syscache数量,默认-1表示不开启。建议取值范围10000-50000
- tencentdb_syscache_evict_num:一次淘汰的syscache数量,默认1。若增长较快可提高至5-10
- tencentdb_relcache_max_num:一个进程最多拥有的relcache数量,默认-1。建议取值范围1000-5000
- tencentdb_relcache_evict_num:一次淘汰的relcache数量,默认1
操作步骤:进入云数据库PostgreSQL控制台,在实例详情页选择参数设置,修改上述参数值即可。
5.2 JIT编译优化
PostgreSQL支持JIT(Just-In-Time)编译优化,可将部分查询表达式编译为机器码提升执行效率。开启方式:在数据库配置文件中设置jit=on,或通过会话级SQL命令临时启用:
SET jit = on;5.3 资源隔离与配额管理
腾讯云PostgreSQL通过内核级改造与插件化能力,构建了instance/database/schema/table四级资源对象层级。通过底层绑定cpu.shares(控制CPU使用下限)与cpu.cfs_quota_us(控制CPU使用上限),实现基于具体对象层级的物理级资源管控。相关参数:
- tencentdb_serverless.min_cpu_cores:实例最小CPU核数
- tencentdb_serverless.max_cpu_cores:实例最大CPU核数
6. 数据迁移与同步
6.1 数据传输服务DTS概述
腾讯云数据传输服务DTS支持数据库不停机迁移,能够最小化避免迁移过程引起的数据库停机对业务造成的影响。DTS支持PostgreSQL 10及之后的所有版本互相跨版本迁移。源数据库支持的部署类型包括:自建PostgreSQL、第三方云厂商PostgreSQL、腾讯云数据库PostgreSQL。
6.2 DTS同步操作步骤
登录DTS控制台,在左侧导航选择数据同步,单击新建同步任务。在新建同步任务页面,选择同步的源实例类型和所属地域、目标实例类型和所属地域、规格等,然后单击立即购买。购买完成后返回数据同步列表,单击操作列的配置,进入配置同步任务页面。在设置同步源和目标数据库页签,填写源和目标数据库信息,单击测试连通性,通过后单击下一步。
6.3 权限要求与注意事项
执行DTS同步任务的账号需要具备源数据库的权限:Event Trigger、Replication、CREATE、DROP、ALTER、SELECT、UPDATE、INSERT、DELETE。目标数据库权限:CREATE、DROP、ALTER、SELECT、UPDATE、INSERT、DELETE。
注意事项:
- 全量数据同步会占用源端资源,建议在业务低峰期操作
- 默认采用无锁方式,同步过程中对源库不加全局锁
- 不支持ROLE、PROCEDURE、TRIGGER、FUNCTION、RULE等对象的同步
- 同步任务依赖max_replication_slots参数,需确保有足够的replication_slots可用
7. 高级功能与扩展能力
7.1 跨库访问(dblink与postgres_fdw)
云数据库PostgreSQL提供dblink和postgres_fdw插件用于同构跨库访问。操作步骤:
- 使用
CREATE EXTENSION 插件名;语句安装插件 - 为每个需要连接的远程数据库创建外部服务器对象并创建链接映射
- 使用对应命令访问外部表以获取数据
跨实例访问时需配置辅助参数:host(目标IP)、port(端口)、instanceid(实例ID)、dbname(数据库名)、access_type(目标实例类型)、uin(账号ID)等。
7.2 cos_fdw冷热分离存储
通过cos_fdw插件可以将COS中的数据加载到PostgreSQL数据库表中,像访问普通表一样访问COS中的数据,实现冷热存储分离。方案优势:
- 统一引擎:多种存储介质,无需业务层改动代码
- 成本更低:相对高性能SSD存储,整体成本降低86.25%
- 使用简单:仅需导出CSV存放于COS,创建外表即可查询
- 无限存储:COS存储容量不设上限
使用步骤:导出数据 → 上传至COS → 创建cos_fdw插件 → 创建Foreign Server → 创建Foreign Table → 查询外部表。
7.3 只读实例与读写分离
只读实例无法单独存在,必须隶属于某个主实例,唯一数据来源是从主实例同步数据。默认允许单主实例创建6个只读实例。创建方式:登录PostgreSQL控制台,在实例列表单击实例ID进入管理页面,在实例详情页单击实例架构图中的添加只读实例,或在只读实例页单击新建。只读实例适用于读多写少场景的读写分离架构,可显著提升系统吞吐量。
8. 安全与运维管理
8.1 安全组配置
安全组是腾讯云提供的网络访问控制手段。配置步骤:登录PostgreSQL控制台,在实例列表单击需要绑定安全组的实例ID,进入实例管理页面;选择安全组页,单击配置安全组;在弹出的对话框选择需要绑定的安全组,单击确定。安全组规则配置在PostgreSQL控制台页面统一适用于内网和外网地址。PostgreSQL默认内网端口为5432,需在安全组中放通该端口。
8.2 监控告警配置
登录腾讯云可观测平台控制台,在左侧导航选择告警管理 > 告警配置。在告警策略页,监控类型选择云产品监控,单击新建策略。在新建策略页中,完成基本信息、告警规则、告警通知的设置。推荐使用集成中心的云监控集成,支持一键采集云产品指标。
8.3 备份与恢复
系统默认会自动发起备份。备份数据支持下载:在实例管理页面选择备份恢复页,在数据备份列表或日志备份列表中选择需要下载的备份,在操作列单击下载。对于已销毁的实例,可在数据库备份页面的已销毁实例备份中单击恢复。
9. 最佳实践与总结
- 网络规划:生产环境务必使用内网连接,将CVM与数据库部署在同一VPC内
- 连接管理:应用层使用连接池管理数据库连接,避免频繁创建和销毁连接
- 性能调优:根据业务负载调整shared_buffers、work_mem、effective_cache_size等参数
- 数据安全:使用RAM子账号进行最小权限授权,避免主账号密钥泄露
- 高可用架构:利用默认一主一备架构搭配同步复制,数据零丢失,可用性高达99.95%
- 成本优化:利用内网访问免流量,冷数据通过cos_fdw转存至COS降低存储成本
问答
问1:腾讯云PostgreSQL支持哪些数据库版本?
答:目前支持PostgreSQL 10到17等多个大版本。
问2:内网连接和外网连接有什么区别?
答:内网连接延迟低、安全性高、无额外流量费用,是生产环境推荐方式;外网连接适用于开发测试,存在安全风险且不纳入SLA保障。
问3:Python如何连接腾讯云PostgreSQL?
答:使用psycopg2库,通过connect()函数传入host、port、database、user、password参数即可建立连接。
问4:如何进行数据迁移?
答:使用数据传输服务DTS,支持不停机迁移,在DTS控制台创建同步任务,配置源和目标数据库后即可完成迁移。
问5:只读实例最多可以创建多少个?
答:默认允许单主实例创建6个只读实例,如需更多可通过在线支持申请。
问6:如何降低PostgreSQL的存储成本?
答:使用cos_fdw插件将冷数据转存至COS对象存储,相对高性能SSD存储可降低成本86.25%。




