文档中心>云数据库 PostgreSQL>实践教程>如何使用云函数定时操作数据库

如何使用云函数定时操作数据库

最近更新时间:2025-07-23 15:15:52

我的收藏
本文将为您介绍如何使用云函数来操作数据库定时任务。

前提条件

已创建腾讯云数据库 PostgreSQL 实例。

操作步骤

创建并配置事件函数

进入 腾讯云函数控制台,创建事件函数。具体步骤请参见 使用控制台创建一个事件函数
说明:
函数名称、地域、命名空间、运行环境创建后不可修改,请确保正确填写。本文示例使用的运行环境为 Node.js 。
触发器是实现定时操作的核心。云函数提供每1分钟执行一次、每5分钟执行一次、每半小时执行一次、每1小时执行一次、每1天执行一次的预设选项,您也可选择自定义触发周期,使用 cron 表达式进行定时。具体请参见 cron 表达式使用方法
创建完毕,在控制台单击函数 ID 进入函数管理 > 函数配置页面,单击编辑

在网络配置中,开启私有网络,选择与需要操作的数据库实例相同的 VPC ,并指定子网。
注意:
云函数必须与数据库实例使用同一 VPC ,否则可能导致连接失败。


编辑云函数代码

方式一:在线编辑代码

进入函数管理 > 函数代码页面,选择提交方法为在线编辑。


安装依赖包

连接云数据库 PostgreSQL,需要先安装 pg 依赖包。在编辑器中单击查看 > 终端,打开终端。

在终端依次输入以下命令,安装依赖包。
cd src
npm install pg

编辑代码

在 src 文件夹下的 index.js 中开始编辑函数。以下示例为在目标实例中插入一条数据( user_id ),执行方法名称为 index.main_handler 。
const { Client } = require('pg');

exports.main_handler = async (event, context) => {
// 从环境变量读取数据库连接信息
const dbConfig = {
host: process.env.DB_HOST,
port: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 5432,
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
};

// 简单校验
if (!dbConfig.host || !dbConfig.database || !dbConfig.user || !dbConfig.password) {
return {
error: '数据库连接信息不完整,请检查环境变量配置',
};
}

const client = new Client(dbConfig);

try {
await client.connect();

// 生成数字字符串 user_id,比如当前时间戳字符串
const userId = Date.now().toString();

// 插入数据SQL
const sql = `INSERT INTO student_info_b0 (user_id) VALUES ($1);`;

const res = await client.query(sql, [userId]);

await client.end();

return {
message: '插入数据成功',
insertedUserId: userId,
rowCount: res.rowCount,
};
} catch (error) {
if (client) {
await client.end();
}
return {
error: error.message,
};
}
};

配置环境变量

进入函数管理 > 函数配置页面,单击编辑
说明:
DB_HOST:目标实例的内网 IP 地址。
DB_NAME:目标数据库名称。
DB_USER:连接所用账户名。
DB_PASSWORD:连接所用账户的密码。
DB_PORT:连接使用的端口号。云数据库 PostgreSQL 默认使用5432 。

修改完毕,单击保存
回到函数管理 > 函数代码页面,单击测试。测试成功,则定时函数创建成功。

方式二:上传代码文件

云函数支持通过本地上传 zip 包、本地上传文件夹、通过 cos 上传 zip 包。

上传完毕后,需确保安装依赖包,才能正常运行代码。
对于 Node.js ,系统可自动安装依赖,具体参见 在线依赖安装
对于其他运行环境,请手动 安装依赖包
上传并安装依赖后,单击测试。测试成功,则定时函数创建成功。

管理定时配置

对于触发器,您可在触发管理页面中进行创建和删除。触发器不支持修改,您可删除原触发器后重新建立。
单击创建触发器,填写信息后提交。

对于不需要的触发器,单击右上角的删除即可。

测试数据库连接

若您的云函数执行失败,可使用以下方法测试是否成功连接到实例。
函数管理 > 函数配置中,单击编辑,在日志配置中启用日志投递后,单击保存。日志计费详情请参见 CLS 计费概述

将以下内容粘贴到 src 文件夹下的 index.js 中。
const { Client } = require('pg');

exports.main_handler = async (event, context) => {
console.log('函数开始执行');

const client = new Client({
host: process.env.DB_HOST, // 数据库地址
port: Number(process.env.DB_PORT), // 数据库端口
user: process.env.DB_USER, // 数据库用户名
password: process.env.DB_PASSWORD, // 数据库密码
database: process.env.DB_NAME, // 数据库名称
});

try {
console.log('开始连接数据库');
await client.connect();
console.log('数据库连接成功');

console.log('开始执行查询');
const res = await client.query('SELECT NOW()');
console.log('查询结果:', res.rows[0]);

await client.end();
console.log('数据库连接关闭');

console.log('函数执行完成,准备返回结果');
return {
statusCode: 200,
body: JSON.stringify({
message: '查询成功',
time: res.rows[0],
}),
};
} catch (err) {
console.error('函数执行出错:', err);
return {
statusCode: 500,
body: JSON.stringify({
message: '函数执行失败',
error: err.message,
}),
};
}
};
单击测试,在日志查询中查看运行日志返回的信息,根据日志信息定位问题,从而进一步解决。