使用sql变量更新PostgreSQL hstore字段

时间:2015-10-20 07:29:33

标签: sql postgresql hstore

我的表files有hstore列details。在我的sql语句中,我向其插入数据:

  UPDATE files SET details =  'new_users=>new_users_count'::hstore where id = v_file_id;

但是我想更新这个hstore字段而不是字符串,而是使用我的sql语句中可用的变量。我怎么能这样做?

2 个答案:

答案 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定义为数字(而不是varchartext),则需要将其转换为文本值:

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或添加一个新条目。