使用 Python,我使用以下查询将表从 Postgresql 保存到 CSV:
copy ({function}) to stdout with (format csv, delimiter ',', header true, force_quote *);
这个请求在哪里{function}
:select ...
请求本身通过以下方式调用copy_expert
:
with db_connection.cursor() as cursor, open(file_path, "w") as file:
cursor.copy_expert(query, file)
一切正常,只有 null 在最终的 csv 中被写入为空值:
... "1",,,,"9597a9724d4dfd0c40681a0", ...
^^^^
我需要将 null 保存为""
:
... "1","","","","9597a9724d4dfd0c40681a0", ...
^^^^^^^^^^
如果我理解正确的话,COPY函数中的NULL参数表示读取CSV时哪些值被识别为null。
是否可以做相反的事情 - 当写入 CSV null 时,将其写为""
或者只是进入原始选择并使用 COALESCE 将每列的 null 替换为空行 - 因为用空字符串初步手动替换 null 有帮助吗?我想知道是否可以使用 COPY 参数配置所需的行为。
UPD:根据@Mike的评论,COPY TO也可以接受NULL值作为参数,但不能传递双引号:
NULL '' -> осталось также ,,,
NULL "" -> zero-length delimited identifier at or near """"
NULL '''' -> null requires a parameter
NULL '''''' -> null requires a parameter
NULL '""' -> CSV quote character must not appear in the NULL specification
NULL '""""' -> CSV quote character must not appear in the NULL specification
NULL E'\'\'' -> изменилось на ,',',
NULL E'\'\'\'\'' -> изменилось на ,'','',
NULL E'\"\"' -> CSV quote character must not appear in the NULL specification
NULL E'\"\"\"\"' -> CSV quote character must not appear in the NULL specification