我有这张桌子:
dbchatbot=# \d messages
Table "public.messages"
Column | Type | Collation | Nullable | Default
-----------------+-----------------------------+-----------+----------+---------
uuid | character varying(36) | | not null |
content | text | | |
Indexes:
"messages_pkey" PRIMARY KEY, btree (uuid)
"messages_uuid_idx" UNIQUE, btree (uuid)
*(我知道我应该使用
uuid
类型字段,但我继承了这个表,我无法更改它。)
有时当我通过
uuid
查询时匹配失败:
select uuid from messages where uuid = '3UUkCMIw3IzrYuwLnezDvL';
uuid
------
(0 rows)
如果我使用
ilike
就可以了:
select uuid from messages where uuid ilike '3UUkCMIw3IzrYuwLnezDvL';
uuid
------------------------
3UUkCMIw3IzrYuwLnezDvL
(1 row)
或者如果我修剪字段值:
select uuid from messages where trim(uuid) = '3UUkCMIw3IzrYuwLnezDvL';
uuid
------------------------
3UUkCMIw3IzrYuwLnezDvL
(1 row)
表的所有记录都没有失败:
select uuid from messages where uuid = '3wvMFFjZLD4aIsj64yLScA';
uuid
------------------------
3wvMFFjZLD4aIsj64yLScA
(1 row)
我不能使用
ilike
或 trim
,因为我正在使用 ORM,并且我不想搞乱主键默认搜索。
我该如何解决这个问题?
某些 UUID 似乎有无用的前导或尾随空格。只需修复它们即可:
update messages set
uuid = trim(uuid)
where trim(uuid) <> uuid;