使用 postgres rust 驱动,文档 https://docs.rs/postgres/latest/postgres/,
使用 select * 语句查询数据,在用 serde_json 序列化基本类型的时候正常,但是特殊类型就panic 了,如 时间戳类型 TIMESTAMP,代码如下
l let query = format!("SELECT * FROM \"{}\".\"{}\";", &schema, &table); let records = client.query(&query, &[]).expect("没有获取到结果"); let mut result: Vec<Map<String, Value>> = vec![]; for row in records.iter() { let mut record = serde_json::Map::new(); for (i, column) in row.columns().iter().enumerate() { let value: Value = match column.type_() { &postgres::types::Type::INT4 => row.get::<_, i32>(i).into(), &postgres::types::Type::TEXT => row.get::<_, String>(i).into(), &postgres::types::Type::BOOL => row.get::<_, bool>(i).into(), /// 这里报错 &postgres::types::Type::TIMESTAMP => row.get::<_, String>(i).into(), // &postgres::types::Type::TIMESTAMP => { // row.get::<_, NaiveDateTime>(i).into() // } // Add more type conversions as needed _ => Value::Null, }; record.insert(column.name().to_string(), value); } result.push(record); } result
怎么处理 postgres 中的特殊类型如 TIMESTAMP 类型的序列化?
extern crate chrono;extern crate postgres;extern crate serde_json;extern crate serde;extern crate serde_derive;use chrono::NaiveDateTime;use postgres::{Client, NoTls};use serde_json::Value;use std::collections::HashMap as Map;fn main() { let conn_str = "host=localhost user=postgres password=yourpassword dbname=yourdbname"; let mut client = Client::connect(conn_str, NoTls).expect("Failed to connect to DB"); let schema = "your_schema"; let table = "your_table"; let records = query_records(&mut client, &schema, &table); println!("Records: {:?}", records);}fn query_records(client: &mut Client, schema: &str, table: &str) -> Vec<Map<String, Value>> { let query = format!("SELECT * FROM \"{}\".\"{}\";", schema, table); let records = client.query(&query, &[]).expect("Failed to fetch records"); let mut result: Vec<Map<String, Value>> = vec![]; for row in records.iter() { let mut record = serde_json::Map::new(); for (i, column) in row.columns().iter().enumerate() { let value: Value = match column.type_() { &postgres::types::Type::INT4 => row.get::<_, i32>(i).into(), &postgres::types::Type::TEXT => row.get::<_, String>(i).into(), &postgres::types::Type::BOOL => row.get::<_, bool>(i).into(), &postgres::types::Type::TIMESTAMP => { let dt = row.get::<_, NaiveDateTime>(i); let dt_string = serde_json::to_string(&dt.format("%Y-%m-%d %H:%M:%S").to_string()).unwrap(); serde_json::from_str(&dt_string).unwrap() } _ => Value::Null, }; record.insert(column.name().to_string(), value); } result.push(record); } result}
Cargo.toml文件:
[dependencies]postgres = "0.20.0"serde_json = "1.0.72"chrono = "0.4.19"serde = "1.0.130"serde_derive = "1.0.130"
我正在使用官方的Elasticsearch Java客户端。它工作得很好,但不幸的是,它的对象没有实现可序列化的接口。我特别需要序列化QueryBuilder的实例。 我发现了两种使用客户端序列化对象的方法。其中之一就是使用QueryBuilder。writeTo()。另一个是使用: 但是我找不到如何在这两种情况下反序列化对象。 我也不确定这是否是解决这项任务的最佳方式。
问题内容: 自将我的Nest客户端升级到2.2.1之后,我无法看到要提交给我的elasticsearch客户端(现在为2.3.0版)的查询。我曾经用这条线: 但是,此方法现在返回void而不是它以前使用的JSON。ConnectionStatus也不存在,所以我再也看不到我发送的json了,有人知道吗?CallDetails.RequestBodyInBytes可用,但返回null。 问题答案:
如何在Grafana的同一面板中使用来自不同查询的prometheus查询结果。 实例 我在格拉法纳有3个普罗米修斯查询,
来自Teradata,我通常会创建一个包含一些变量的易失性表,我会在代码中使用这些变量。 例如。, 然后我会在SELECT WHERE子句中使用该表: 我试图在色调(Impala editor)中执行类似的操作,但遇到了一个错误: AnalysisException:第5行中的语法错误:未定义:来自表名隐藏^遇到:来自预期的:大小写、强制转换、默认值、存在、FALSE、IF、INTERVAL、NO
这个 pgsql 报 syntax error as or "execption" 是为什么 ? 正确应该怎么写
本文向大家介绍postgresql SELECT查询中的公用表表达式,包括了postgresql SELECT查询中的公用表表达式的使用技巧和注意事项,需要的朋友参考一下 示例 公用表表达式支持提取较大查询的部分。例如: