我的表files
有hstore列details
。在我的sql语句中,我向其插入数据:
UPDATE files SET details = 'new_users=>new_users_count'::hstore where id = v_file_id;
但是我想更新这个hstore字段而不是字符串,而是使用我的sql语句中可用的变量。我怎么能这样做?
答案 0 :(得分:7)
PL / pgSQL无法检测字符串文字中的变量。您需要使用hstore
类型的“构造函数”方法来传递变量:
UPDATE files
SET details = hstore('new_users', p_new_user_count)
where id = v_file_id;
如果将p_new_user_count
定义为数字(而不是varchar
或text
),则需要将其转换为文本值:
UPDATE files
SET details = hstore('new_users', p_new_user_count::text)
where id = v_file_id;
问题发生变化后修改:
要对多个变量执行此操作,您可以连接两个hstore值:
details = hstore('new_users', p_new_user_count::text)||hstore('post_count', p_post_count::text)
或使用数组:
details = hstore(array['new_users','post_count'], array[p_user_count, p_post_count]::text[]);
手册中记录了这一切:http://www.postgresql.org/docs/current/static/hstore.html
答案 1 :(得分:1)
如果您只需要替换hstore中的 new_users ,则
UPDATE files
SET details = details || hstore('new_users', p_new_user_count::text)
where id = v_file_id;
如果该列中已存在new_users,它将替换new_users或添加一个新条目。