提问人:ChrisAsi71 提问时间:11/16/2023 最后编辑:ChrisAsi71 更新时间:11/16/2023 访问量:33
将 JSON 文件导入 Postgres 16 数据库时出错(最后一个预期列之后的 22P04 额外数据)
Error importing JSON file into Postgres 16 Database (22P04 extra data after last expected column)
问:
所以我有以下文件“14.json”,我正在尝试将其导入到 postgres 16 数据库上的临时表中
现在我无法附加文件..但它的内容在这里:
14.json
{ "ChannelReadings": [
{ "ReadingsDto": [
{
"Si": 47.67,
"Raw": 0,
"Conversion": 0,
"TimeStamp": "2023-01-24T12:57:43"
},
{
"Si": 47.22,
"Raw": 0,
"Conversion": 0,
"TimeStamp": "2023-01-24T13:02:43"
},
{
"Si": 47.6,
"Raw": 0,
"Conversion": 0,
"TimeStamp": "2023-01-24T13:07:43"
},
{
"Si": 47.5,
"Raw": 0,
"Conversion": 0,
"TimeStamp": "2023-01-24T13:12:43"
}
],
"ChannelId": 14
},
{
"ReadingsDto": [
{
"Si": 2.893605,
"Raw": 0,
"Conversion": 0,
"TimeStamp": "2023-01-24T13:07:43"
}
],
"ChannelId": 12
},
{
"ReadingsDto": [
{
"Si": 3.294233,
"Raw": 0,
"Conversion": 0,
"TimeStamp": "2023-01-24T13:07:43"
}
],
"ChannelId": 13
},
{
"ReadingsDto": [
{
"Si": 3.294233,
"Raw": 0,
"Conversion": 0,
"TimeStamp": "2023-01-24T13:07:43"
}
],
"ChannelId": 16
}
],
"DeviceSerialNumber": "894339",
"RestartPointerNo": 5514732,
"NewDownloadTable": false,
"DataHashDto": "5Mckxoq42EeLHmLnimXv6A=="
}
我导入此代码的代码如下:
DROP TABLE IF EXISTS tmp;
CREATE TEMP table tmp (
c TEXT
);
COPY tmp FROM 'C:\ChrisDev\Readings\14.json';
但是,我收到以下错误:
[2023-11-16 12:44:32] [22P04] ERROR: extra data after last expected column
[2023-11-16 12:44:32] Where: COPY tmp, line 2: " { "ReadingsDto": ["
我尝试编辑它,但无济于事 我在这里做错了什么?
答:
0赞
Zegarek
11/16/2023
#1
您的文件中可能有选项卡,这对复制来说是不幸的......格式化文本
(默认行为),因为另一个默认设置配置为使用制表符:copy
delimiter
FORMAT
选择要读取或写入的数据格式:、(逗号分隔值)或 。缺省值为 。text
csv
binary
text
DELIMITER
指定用于分隔文件每行(行)内列的字符。默认值为文本格式的制表符,格式为逗号。这必须是单个单字节字符。使用格式时不允许使用此选项。
CSV
binary
要解决此问题,请尝试使用另一个分隔符:
DROP TABLE IF EXISTS tmp;
CREATE TEMP table tmp (c TEXT );
COPY tmp FROM 'C:\ChrisDev\Readings\14.json' WITH (FORMAT TEXT, DELIMITER '~');
评论
1赞
ChrisAsi71
11/16/2023
我试过了,效果很好!你是对的。我的文件中可能确实有选项卡。我能够将我的文件加载到临时表中,然后进行选择,以原始格式返回 JSON!非常感谢你。
评论
FORMAT
选择要读取或写入的数据格式:文本
、csv
(逗号分隔值)或二进制
。默认值为text
。您正在导入纯文本,默认格式是 ,所以这看起来应该有效。您确定您正在运行您共享的确切代码,而不是添加或在末尾?你有没有试过显式添加?text
CSV
WITH(FORMAT CSV)
COPY
WITH(FORMAT TEXT)
WITH(FORMAT TEXT)