如何使用rust-postgres检查列是否为NULL?

时间:2018-01-02 20:34:53

标签: postgresql rust

我正在使用rust-postgres library,我想做一个SELECT并检查第一行的第一列是否为NULL。

这就是我获取数据的方式:

let result = connection.query(
    r#"
        SELECT structure::TEXT
        FROM sentence
        WHERE id = $1
    "#,
    &[&uuid]
);

let rows = result.expect("problem while getting sentence");

let row = rows
    .iter()
    .next() // there's only 1 result
    .expect("0 results, expected one...");

我发现解决问题的唯一简单方法是以下代码:

match row.get_opt(0) {
    Some(Ok(data)) => some data found,
    Some(Err(_)) => the column is null,
    None => out of bound column index
}

不幸的是,似乎Some(Err(_))是任何类型的SQL /数据库错误的执行路径,而且不仅仅是检索到的列是NULL。

我应该使用哪种条件来检查列是否为空?

1 个答案:

答案 0 :(得分:1)

如果您需要知道的 ,该列是否为NULL,您可以尝试将查询更改为:

SELECT COUNT(1) FROM sentence WHERE id = $1 AND structure IS NOT NULL

有或没有NOT

如果你想让逻辑变得更简单,那么任何错误都是一个实际错误,我会考虑将选择值改为:

COALESCE( structure::TEXT, ''::TEXT ) AS "structure"

所以永远不应该是NULL。只要空字符串不是该列的有效非NULL值,这应该有效。

否则,我可能误解了你的问题。