pgrs回传自定义结构体列表以及查询table

记录两个有用的pgrs为postgres写拓展的函数

use pgrx::prelude::*;
use serde::{Deserialize, Serialize};

::pgrx::pg_module_magic!();

#[pg_extern]
fn hello_first() -> &'static str {
    "Hello, first"
}

#[derive(PostgresType, Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct A {
    pub name: String,
}

// 返回一个自定义struct的vector
#[pg_extern]
#[search_path(@extschema@)]
fn return_mytype() -> Vec<A> {
    let a1 = A {
        name: "asdfa".to_string(),
    };
    let a2 = A {
        name: "3333".to_string(),
    };
    vec![a1, a2]
}
//  数据库 wq有 table account,一列数据  value id 1, name asd
#[pg_extern]
fn return_table() -> Result<
    TableIterator<
        'static,
        (
            name!(id, i32),
            name!(name, Option<String>),
            name!(human_age, i32),
        ),
    >,
    spi::Error,
> {
    /*
    从account表格选择所有数据,另外单独配置一列human_age
     */
    let query = "SELECT * FROM account;";

    Spi::connect(|client| {
        let mut results = Vec::new();
        let tup_table = client.select(query, None, None)?;

        for row in tup_table {
            let id = row["id"].value::<i32>()?;
            let name = row["name"].value::<String>()?;
            let human_age = 7;
            results.push((id.unwrap_or(0), name, human_age));
        }

        Ok(TableIterator::new(results))
    })
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值