在我们的软件中,我们仍在使用 postgresql 8.4。在 Archlinux 上我找不到安装 8.4 的任何可能性,所以我开始使用 9.5 进行任务,然后想将其翻译为 8.4。现在我可以在两个版本上运行 UPDATE 查询,但得到不同的结果。
询问:
UPDATE properties
SET propertyvalue = regexp_replace(propertyvalue, E'[\u0001-\u001f]', '', 'g')
WHERE properties_id in
(SELECT DISTINCT(properties_id)
FROM regexp_matches(propertyvalue, E'[\u0001-\u001f]'));
工作流程是我重新初始化数据库并将相同的 sql-dump 转储到两个版本中。
在 8.4 上,消息显示“更新 2689816”,在 9.5 上显示“更新 241294”。
当我跑
SELECT count(*)
FROM properties
WHERE properties_id in
(SELECT DISTINCT(properties_id)
FROM regexp_matches(propertyvalue, E'[\\u0001-\\u001f]'));
我得到了两个版本相同的结果:
count
--------
241294
(1 row)
这是最让我困惑的地方。为什么 regexp_matches 似乎对模式的解释与 regexp_replace 不同?
有没有人有这方面的经验?