如何在RavenDB SQL ETL中将完整文档存入PostgreSQL的jsonb列?
RavenDB SQL ETL导出完整文档到PostgreSQL jsonb列的解决方案
问题背景
在RavenDB 5.4+中配置SQL ETL任务,需将完整文档存入PostgreSQL的jsonb类型data列(无需手动映射字段),但直接传递this或使用JSON.stringify均触发类型不匹配错误:
Npgsql.PostgresException (0x80004005): 42804: column "data" is of type jsonb but expression is of type text
PostgreSQL目标表结构:
create table public.foo ( id text, data jsonb );
解决方案
使用RavenDB ETL脚本内置的toJson()函数,将文档对象序列化为Npgsql可识别的JSON类型,而非普通字符串。
正确的转换脚本:
loadToFoo ({ id: id(this), data: toJson(this) });
失败原因分析
- 直接传递
this:RavenDB会将对象序列化为字符串,但未标记为JSON类型,Npgsql将其识别为text,与jsonb列类型冲突。 JSON.stringify(this):返回的是字符串字面量,同样被识别为text类型,无法自动转换为jsonb。JSON.parse(this):this是文档对象而非字符串,不符合JSON.parse的参数要求,因此抛出Expected string but got Symbol错误。
内容的提问来源于stack exchange,提问作者Julián
相关产品推荐
相关产品推荐

