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
EXPERTE
gefragt vor 9 Monaten22 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 9 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen