【问题标题】:Storing datatype u64 in QuestDB在 QuestDB 中存储数据类型 u64
【发布时间】:2021-04-12 10:42:01
【问题描述】:

显然,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" }) }

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

【问题讨论】:

    标签: questdb


    【解决方案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(())
    }
    

    注意i64u64 的区别如下:

    • i64 是 +/- 9223372036854775808
    • u64 unsigned int 是 0-18446744073709551615

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

    编辑有关详细信息,请参阅以下资源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 2017-03-19
      相关资源
      最近更新 更多