Redshift从varchar字段中删除存储的字符串中的反斜杠。

0

【以下的问题经过翻译处理】 您好!

在将反斜杠存储在varchar字段中方面,Redshift和Aurora或普通的PostgreSQL存在一些差异。 Redshift会删除一个反斜杠,而Aurora则按原样插入字符串。这是否可以接受?

最小的例子:

在Redshift上:

select '\\' as test from test_table limit 1;

返回:

\

在Aurora或pgsql上:

select '\\' as test from test_table limit 1;

返回:

\\

我想在RS中将JSON存储在varchar字段中。当JSON包含反斜杠符号以转义JSON的标记时,问题就开始了:

 {"field":"text\""}

结果是,存储值中删除了\,从而更改了要求存储的值,最终破坏了JSON,无法反序列化。

CREATE TABLE test_table(
  varchar_field varchar
);

insert into test_table_1 (varchar_field) VALUES ('{"field":"text\""}');
select * from test_table;

返回:

{"field":"text""}

这不是正确的JSON,而是已插入正确的JSON。

对于相同的示例,Aurora返回正确的JSON:

{"field":"text\""}

这是预期的行为吗?

我如何禁止删除反斜杠?

是否有地方描述如何在RS中存储文本与其他DB有所不同?

我通过insert语句将数据插入RS,短期解决方案不可使用COPY。我该如何处理?我很可能在这里缺少关键的东西,但我卡了几个小时,无法自己找到解决方案:)

RS集群版本:1.0.7562

RS驱动程序版本:1.2.16.1027

最好的问候,

pby

编辑人员:pby于2019年5月17日上午

profile picture
专家
已提问 8 个月前15 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好pby,

我怀疑行为差异可能与你演示的测试用例中基于PostgreSQL版本有关。

据文档记录,Redshift是一个PostgreSQL v8.0.2分支的单版本衍生物:https://docs.aws.amazon.com/redshift/latest/dg/c_redshift-and-postgres-sql.html

Aurora版本是基于许多PostgreSQL版本的衍生物,记录在这里:https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html

PostgreSQL将是其当前版本。

我怀疑你字符串文字中的转义处理是基于基本PostgreSQL版本的产物,即Redshift和PostgreSQL v8.0.2可能会执行相同的操作。

希望这有所帮助,

-Kurt

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则