问题不在于获取 TXT,因为它是
SELECT to_jsonb(file_get_contents('/tmp/test.json'))
返回的不是 JSON 对象,而是一个字符串......即使replace(txt,E'\n',' ')
它不起作用。如何规范化并将字符串真正转换为 JSON?
PS:我正在使用 JSONb,它必须是 JSON 用于摄取。
笔记
json文件/tmp/test.json
:
[
{
"foo": "etc",
"bar": "etc",
"x": 123
},
{
"foo": "aaa",
"bar": "bbb",
"x": 456
}
]
我正在使用 UBUNTU 18 LTS、PostgreSQL v12 和 linux 标准 TXT 中的文件。终端命令file -i /tmp/test.json
说这一切都很好,“text/plain; charset=utf-8”。
仅将全文加载到一个字段中(使用 COPY FROM 似乎不可能),PostgreSQL 很丑,但是这个功能已经过测试并且是可靠的:
CREATE EXTENSION PLpython3U;
CREATE or replace FUNCTION file_get_contents(p_file text) RETURNS text AS $$
import os.path
if not os.path.isfile(args[0]):
return None
with open(args[0],"r") as content_file:
content = content_file.read()
return content
$$ LANGUAGE PLpython3U;