PostgreSQL中如何删除hstore字段多余键值对仅保留指定键值对
PostgreSQL hstore 仅保留指定键值对方案
hstore扩展原生支持键值子集提取,单条SQL就能完成需求,不需要复杂逻辑。
使用hstore自带的slice函数即可实现:传入hstore字段和要保留的键组成的数组,会自动返回只包含目标键的新hstore,其余键值对会全部被剔除。也可以用hstore(name, ARRAY['name:vi'])的写法,和slice函数效果完全一致。
仅查询时过滤(不修改原表数据)
如果只是查询结果需要保留指定键,直接查询即可:
SELECT slice(name, ARRAY['name:vi']) AS filtered_name FROM 你的表名;
要保留多个键就往数组里追加键名,比如同时保留越南语、中文键:ARRAY['name:vi', 'name:zh']
永久修改表内存储数据
如果要把表里存储的hstore值直接改成仅保留目标键,用UPDATE语句:
UPDATE 你的表名 SET name = slice(name, ARRAY['name:vi']);
操作前校验(避免误改)
执行UPDATE前建议先跑校验语句确认结果正确:
SELECT name AS original_data, slice(name, ARRAY['name:vi']) AS filtered_data FROM 你的表名 -- 可追加WHERE条件限定校验范围 LIMIT 10;
确认返回的filtered_data只有你需要的"name:vi"=>"TT. Mường Tè"键值对,再执行更新操作即可。
内容的提问来源于stack exchange,提问作者Nguyễn Hoài Nam
相关产品推荐
相关产品推荐

