[pgrx开发postgresql数据库扩展]7.返回序列的函数编写(3)多行表序列

news/2024/7/9 19:35:03 标签: 数据库, postgresql, sql

前文再续,书接上一回。

上一回我们解析了如何通过pgrx编写srf,返回一个TableIterator,但是在具体应用的时候,我们还是针对一条记录返回了一行数据(多个字段的一行,也还是一行),并没有实现通过一行数据库记录,实现多行表序列的转换,今天我们就来写几个示例,来表现一下这pgrx的这个能力。

测试数据如下:

例如,其中values每天的平均空气质量(随机模拟数据,不要在意这些细节)

需求:给每天的value上面,编上日期编号,也就是原始库中的一条数据,会被平铺成28-31条不等。

代码如下:

#[pg_extern]
fn get_day_value(value:Vec<i32>) ->
TableIterator<'static,(name!(day,i32),name!(value,i32))>{
    let mut res:Vec<(i32,i32)> = Vec::new();
        for idx in 0..value.len(){
            res.push((idx as i32+1,value[idx]))
        }
    TableIterator::new(res)
}

测试效果如下:

用真实数据来跑一下:

效果完全么得问题,下面就可以直接通过数据库函数来做一些计算了,比如求每个站点每个月的最大值:

其实就具体工作来说,很少把数据直接存成这个样子,然后还要直接使用SQL来进行花式操作的——SQL的全称就叫做“Structured Query Language”,结构化查询语言,只有数据满足结构化范式,才能发挥出SQL的最佳效果,虽然数据库支持各种ARRAY或者JSON,只要搞成了非结构化,SQL效果肯定不是那么好用的。

当然,如果有人要问,SQL不是最好的选择,那么真实的要处理这种情况,啥是最好选择呢?当然是DBC……直接通过数据库连接读到具体的程序应用中来进行更复杂的一些操作和逻辑处理……

属于是ETL基本功了。

不过这个方法,我经常用来做模拟数据……因为我很多时候都在做算法示例,模拟数据对我的工作有至关重要的作用:

下面我用TableIterator来做一个模拟数据生成函数:

代码如下:

/**
* 随机生成一个5个字段的表格
* 
*/
#[pg_extern]
fn get_random_table(num_rows: i32) -> 
TableIterator<'static, (
    name!(id,i32),
    name!(gid,String),
    name!(username, String),
    name!(age,i32),
    name!(sale, f32)
)> {
    let mut rd = thread_rng();
    //使用函数式编程实现
    TableIterator::new((1..=num_rows).map(move |i| (i,
        uuid7::uuid7().to_string(),
        Alphanumeric.sample_iter(&mut rd).take(8).map(char::from).collect::<String>(),
        rd.sample(Uniform::new(25, 50)) as i32,
        rand::random::<f32>())))
}

结果如下:

当然,每次运行这个函数结果都不一样,所以我们可以通过这个函数来生成一个模拟数据的表格,下面就可以生成一个1000条记录的模拟数据表格:

之后需要的话,就可以在这个表格上进行测试工作了。

感觉怎么说的呢?

对了:

造假一时爽……

一直造假一直爽……

打完收工。


http://www.niftyadmin.cn/n/339719.html

相关文章

为什么有了 HTTP 还要 RPC

哈喽大家好&#xff0c;我是咸鱼 随着互联网技术的发展&#xff0c;分布式架构越来越被人们所采用。在分布式架构下&#xff0c;为了实现复杂的业务逻辑&#xff0c;应用程序需要分布式通信实现远程调用 而这时候就需要一种协议来支持远程过程调用&#xff0c;以便实现不同应…

MATLAB第九章_数据图形可视化

目录 数据图形可视化 MATLAB图形窗口 函数绘制 一元函数绘制 二元函数绘图 数据图形绘制简介 离散数据可视化 连续函数可视化 二维绘图函数 基本绘图 快速方程式画图 特殊二维图形 三维绘图函数 绘制三维曲面 生成栅格数据 网格曲线绘制 隐藏线的显示和关闭 数据…

写公开信可别等被喷,才发现其实可以这样

正文共 1022 字&#xff0c;阅读大约需要 4 分钟 公务员必备技巧&#xff0c;您将在4分钟后获得以下超能力&#xff1a; 快速生成公开信 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●图片由Le…

「硬核分享」Docker+jenkinsPipeline 运行实现 python 自动化

一、实现思路 在 Linux 服务器安装 docker 创建 jenkins 容器 jenkins 中创建 pipeline 项目 根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境) 运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目 执行完成之后删除容器 二、环境准…

Cube Map 系列之:手把手教你 实现天空盒(Sky Box)

什么是天空盒 An skybox is a box with textures on it to look like the sky in all directions or rather to look like what is very far away including the horizon.天空盒是一个使用纹理贴图构建的盒子&#xff0c;人在其中朝任何一个方向看去&#xff0c;其纹理彷佛天空…

VuePress 1.x 踩坑记录

文章目录 前言1.Node.js 版本问题2.侧边栏3.添加页面目录导航4.非首页 footer 不生效5.部署到 Github 的错误vuepress 的 docs 与 Github Pages 的 docs 目录冲突样式丢失 7.资源引用问题本地图片找不到引用 CSDN 图片报 403 错误 参考文献 前言 我的第二本开源电子书《后台开…

YOLOv5、YOLOv7独家原创改进:独家首发最新EfficiCLNMS改进点,改进有效可以直接当做自己的原创改进点来写,新的增强预测帧

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5、YOLOv7改进:独家首发最新EfficiCL-NMS改进点,新的增强预测帧率。 💡对自己数据集改进有效的话,可以直接当做自己的原创改进点来写!!!改…

在光伏行业的自动化生产中,EAP起到了什么作用?

随着可再生能源的快速发展和环保意识的增强&#xff0c;光伏行业作为一种清洁能源产业正迅速崛起。光伏生产过程的自动化已成为行业的追求和趋势。在光伏行业的自动化生产中&#xff0c;EAP&#xff08;设备自动化程序&#xff09;系统发挥着关键的作用&#xff0c;为生产线的运…