使用 sql 变量更新 PostgreSQL hstore 字段

Update PostgreSQL hstore field with sql variable

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

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

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

PL/pgSQL 无法检测字符串文字中的变量。需要使用hstore类型的"constructor"方法传递一个变量:

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

如果您只需要替换 hstore 中的 new_users 那么

UPDATE files 
SET details = details || hstore('new_users', p_new_user_count::text)
where id = v_file_id;

如果列中已经存在,它将替换 new_users 或添加新条目。