我将postgres表中的jsonb对象作为一个大的
application/jsonl
http响应。这非常有效:
def stream_json_from_copy_syntax():
conn = psycopg2.connect(...)
cur = conn.cursor()
file = BytesIO()
cur.copy_expert(
sql="COPY (select my_jsonb from large_table) TO STDOUT WITH (FORMAT text)",
file=file
)
file.seek(0)
for line in file.readlines():
line = unescape(line)
yield line
将上述物质推入烧瓶中。这很快,而且内存占用非常小。
jsonb字段最初是正确转义的,但看起来
(FORMAT text)
正在添加一些额外的逃逸。
这就变成了
My \ string
进入propper json
"My \\ string"
然后进入
"My \\\\ string"
.所以有额外的逃跑。我已经用以下方法处理了这个问题:
def unescape(line):
return line.replace(b'\\\\', b'\\')
我认为这解决了大多数问题,如果不是全部的话,但我有点不确定是否还有其他问题
(文本格式)
我还没处理好逃跑的事。
我该如何恰当地消除什么
(文本格式)
做或者有没有办法不让它逃逸任何东西,因为最初的json逃逸工作正常。
注意,使用
(ESCAPE 'escape_character')
仅适用于
(FORMAT csv)
:
https://www.postgresql.org/docs/current/sql-copy.html