我在Postgres DB中有以下表格:
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对我来说,看起来v被强制转换为VARCHAR,尽管它应该是BYTEA。
你知道这是一个bug,还是我做错了吗?
发布于 2021-07-08 13:41:52
使用内置的解码函数解决了这个问题。
SELECT
t0.name,
t0.value
FROM
(
SELECT
name,
value
FROM
resources_index
WHERE
hash = $1
AND value LIKE decode($2, 'escape')
) AS t0
LIMIT
$3https://stackoverflow.com/questions/68296146
复制相似问题