首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sqlx在Postgres中查询BYTEA

使用sqlx在Postgres中查询BYTEA
EN

Stack Overflow用户
提问于 2021-07-08 13:35:31
回答 1查看 78关注 0票数 0

我在Postgres DB中有以下表格:

代码语言:javascript
复制
CREATE TABLE resources_index (
    hash varchar NOT NULL,
    "name" varchar NOT NULL,
    viewentry_id varchar NOT NULL,
    value bytea NULL
);

我想使用sqlx执行以下准备好的语句

代码语言:javascript
复制
SELECT
      t0.name,
      t0.value
    FROM
      (
        SELECT
          name,
          value
        FROM
          resources_index
        WHERE
          hash = $1
          AND value :: BYTEA LIKE $2 :: BYTEA
      ) AS t0
    LIMIT
      $3

问题出现在以下行:AND value :: BYTEA LIKE $2 :: BYTEA

Postgres DB错误响应为:ERROR: operator does not exist: character varying = bytea

查询的执行方式为:

代码语言:javascript
复制
let mut q = sqlx::query_as::<sqlx::Postgres, IndexRow>(&query);
    for v in values.iter() {
        log::debug!("bind value {}", v);
        q = q.bind(v.as_bytes());
    }
    q.bind(limit).fetch_all(pool).await

对我来说,看起来v被强制转换为VARCHAR,尽管它应该是BYTEA

你知道这是一个bug,还是我做错了吗?

EN

回答 1

Stack Overflow用户

发布于 2021-07-08 13:41:52

使用内置的解码函数解决了这个问题。

代码语言:javascript
复制
SELECT
      t0.name,
      t0.value
    FROM
      (
        SELECT
          name,
          value
        FROM
          resources_index
        WHERE
          hash = $1
          AND value LIKE decode($2, 'escape')
      ) AS t0
    LIMIT
      $3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68296146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档