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

这里说明如何使用云函数来操作数据库定时任务。已创建腾讯云数据库 PostgreSQL 实例。

相关产品
云数据库 PostgreSQL 产品页,含版本规格、价格与购买入口。

前提条件

操作步骤

一、创建并配置事件函数

进入 腾讯云函数控制台,创建事件函数。具体步骤请参见 使用控制台创建一个事件函数。

注意:说明:

创建完毕,在控制台单击函数 ID 进入函数管理 > 函数配置页面,单击编辑。

在网络配置中,开启私有网络,选择与需要操作的数据库实例相同的 VPC ,并指定子网。

注意:云函数必须与数据库实例使用同一 VPC ,否则可能导致连接失败。

二、方式一:在线编辑代码

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

三、安装依赖包

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

在终端依次输入以下命令,安装依赖包。

cd srcnpm 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, }), }; }};

单击测试,在日志查询中查看运行日志返回的信息,根据日志信息定位问题,从而进一步解决。

赞 (0)
上一篇 4天前
下一篇 4天前