postgresql 8.4 和 9.5 的更新结果不同
update results in postgresql 8.4 and 9.5 are different
在我们的软件中,我们仍在使用 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 上,消息显示 "UPDATE 2689816",在 9.5 上显示 "UPDATE 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 不同?
有没有人有这方面的经验?
我只是愚蠢,脚本只是删除了一个 \ 我刚刚在我的问题中看到它,抱歉这个问题
在我们的软件中,我们仍在使用 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 上,消息显示 "UPDATE 2689816",在 9.5 上显示 "UPDATE 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 不同?
有没有人有这方面的经验?
我只是愚蠢,脚本只是删除了一个 \ 我刚刚在我的问题中看到它,抱歉这个问题