首页 > 解决方案 > 如何更新 PostgreSQL 数据库中 Java 地图的文本表示?

问题描述

我们正在为我们的开发人员运行 Atlassian Bitbucket Server,并且我们有一个备份/恢复机制,可以将生产配置复制到测试环境中。为了使测试环境中的一切正常运行,SQL 脚本用于调整 Bitbucket PostgreSQL 数据库中的某些设置(例如,基本 URL、LDAP 连接设置等)。

Bitbucket 数据库中的某些值似乎存储为java.util.Map对象的文本表示形式,key_value例如此 Bitbucket 外观设置示例中的字段(例如,UI 标题颜色):

bitbucket=# select * from plugin_setting where key_name like 'look%';

         namespace         |          key_name           |              key_value              |  id  
---------------------------+-----------------------------+-------------------------------------+------
 bitbucket.global.settings | look-and-feel:COLOR_MAP     | #java.util.Map                     +| 7988
                           |                             | customThemePrimaryColour\x0C#abcdef+| 
                           |                             | customThemeHeaderColour\x0C#9933ff  | 

为了更好地区分我们的测试环境和生产环境,我想key_value用一个全新的值映射更新数据库和 Bitbucket 无法重新启动。例如,我试过这个,但它根本没有效果:

UPDATE plugin_setting SET key_value='#java.util.Map\ncustomThemeHeaderColour\x0C#abcdef'
                      WHERE key_name='look-and-feel:COLOR_MAP';

换句话说,UPDATE 成功写入了key_value,但不知何故没有任何换行符(并且 Bitbucket 标题颜色在重新启动后保持不变)。我还尝试在换行符+之前显式添加 a ,但这也没有效果。\n

似乎我没有正确地转义某些字符或其他东西......

标签: postgresqlbitbucket

解决方案


与此同时,我找到了解决方案。本质上,我只是忘了添加转义字符串标记E

-- set the Bitbucket header color to light purple via properties of the look-and-feel plugin
UPDATE plugin_setting  SET key_value = E'#java.util.Map\ncustomThemeHeaderColour\x0C#b941ff'
                       WHERE key_name = 'look-and-feel:COLOR_MAP';

另请参阅:Postgres 字符串前的“E”是什么?


推荐阅读