【发布时间】:2019-12-03 19:04:35
【问题描述】:
问题不在于获取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;
【问题讨论】:
标签: json postgresql data-ingestion