1

显然,Rust Postgres 库不允许将数据类型 u64 存储在 QuestDB 中。所以我试图偷偷将它作为字符串绕过准备好的语句:

INSERT INTO table_x VALUES ($1,cast($2 as LONG))

但是,当我以 2 美元的价格传递字符串时,这也会导致我出错:

Error { kind: ToSql(1), cause: Some(WrongType { postgres: Numeric, rust: "&alloc::string::String" }) }

有谁知道如何解决这个问题?

4

1 回答 1

1

以下适用于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是 +/-9223372036854775808
  • u64无符号整数是0-18446744073709551615

QuestDB 中的数据类型long是 64 位有符号 int ( i64),因此如果您的值超过9223372036854775808,则需要不同的处理。

编辑以获取更多信息,请参阅以下资源:

于 2021-04-12T14:19:15.893 回答