簡體   English   中英

使用 sqlx 在 Postgres 中查詢 BYTEA

[英]Query BYTEA in Postgres using sqlx

我在 Postgres 數據庫中有下表:

CREATE TABLE resources_index (
    hash varchar NOT NULL,
    "name" varchar NOT NULL,
    viewentry_id varchar NOT NULL,
    value bytea NULL
);

我想使用sqlx執行以下准備好的語句:

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

查詢執行如下:

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

對我來說,雖然它應該是BYTEA但看起來v被轉換為VARCHAR

你知道這是一個錯誤還是我做錯了?

使用內置的解碼功能解決了它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM