使用 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
定义为数字(而不是 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
如果您只需要替换 hstore 中的 new_users 那么
UPDATE files
SET details = details || hstore('new_users', p_new_user_count::text)
where id = v_file_id;
如果列中已经存在,它将替换 new_users 或添加新条目。
我有 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
定义为数字(而不是 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
如果您只需要替换 hstore 中的 new_users 那么
UPDATE files
SET details = details || hstore('new_users', p_new_user_count::text)
where id = v_file_id;
如果列中已经存在,它将替换 new_users 或添加新条目。