显然,Rust Postgres库不允许在QuestDB中存储数据类型u64。因此,我试图将其作为字符串偷偷绕过已准备好的语句:
INSERT INTO table_x VALUES ($1,cast($2 as LONG))
然而,当我为$2传递一个字符串时,这也会导致我的错误:
Error { kind: ToSql(1), cause: Some(WrongType { postgres: Numeric, rust: "&alloc::string::String" }) }
有谁知道怎么解决这个问题吗?
发布于 2021-04-12 22:19:16
下面的代码在as中运行良好
use postgres::{Client, NoTls, Error};
fn main() -> Result<(), Error> {
let mut client = Client::connect("postgresql://admin:quest@localhost:8812/qdb", NoTls)?;
// Basic query
client.batch_execute(
"CREATE TABLE IF NOT EXISTS rust (name STRING, value long);",
)?;
// Parameterized query
let name = "abc";
let uval: u64 = 9223372036854773000;
let val = uval as i64;
client.execute(
"INSERT INTO rust (name, value) VALUES ($1,$2)",
&[&name, &val],
)?;
println!("import finished");
Ok(())
}注意:i64和u64的区别如下:
i64 is +/- 9223372036854775808u64 unsigned int is 0-18446744073709551615long的QuestDB中的数据类型是64位有符号整数(i64),因此如果您的值超过9223372036854775808,您将需要不同的处理。
edit有关详细信息,请参阅以下资源:
https://stackoverflow.com/questions/67056954
复制相似问题