尝试在 Linux(Ubuntu 20.04) 将 CSV 文件导入 Postgres 中的数据库
Trying to import a CSV file into a database in Postgres on Linux(Ubuntu 20.04)
使用 Linux 命令 df -Ph > metric.csv 创建此输出:
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 786M 2.2M 783M 1% /run'''
我登录到 postgres 并创建 TABLE:
CREATE TABLE metric(filesystem varchar,size varchar,used
varchar,available varchar,use varchar,mounted_on varchar, PRIMARY
KEY(filesystem));
接下来我将使用 COPY 命令将数据插入此 table:
COPY metrics (filesystem,size,used,available,use,mounted_on) FROM '/data/metric.csv' CSV HEADER DELIMITER ',';
我收到以下错误:
ERROR: missing data for column "size"
CONTEXT: COPY metrics, line 2: "udev 3.9G 0 3.9G 0% /dev"
对于如何更正此问题以便我可以将数据插入数据库的任何帮助或建议,我将不胜感激。
您可能想试试这个:
df -Ph | awk 'BEGIN{OFS=","}NR>1{=; print}' > metric.csv
正如我在上面的评论中提到的,您的 csv 文件不是 csv。
awk 命令摆脱了“header”(我假设你 不想 在 table 中摄取)并替换 带 逗号 .
的空格
关于 awk - 语句的一些解释性词语。
在 BEGIN{}
部分中,处理发生在 awk 实际处理任何输入之前。我们在这里告诉 awk 使用 ,
作为输出字段分隔符 (OFS)。默认情况下,awk 使用 任意数量的连续空格。
NR>1
告诉 awk 跳过第一行(NR == 记录数),从而省略 header.
{=;print}
- 不幸的是,awk 需要将第一个字段分配给它自己来处理该行; print
完全按照您的想法行事。
使用 Linux 命令 df -Ph > metric.csv 创建此输出:
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 786M 2.2M 783M 1% /run'''
我登录到 postgres 并创建 TABLE:
CREATE TABLE metric(filesystem varchar,size varchar,used
varchar,available varchar,use varchar,mounted_on varchar, PRIMARY
KEY(filesystem));
接下来我将使用 COPY 命令将数据插入此 table:
COPY metrics (filesystem,size,used,available,use,mounted_on) FROM '/data/metric.csv' CSV HEADER DELIMITER ',';
我收到以下错误:
ERROR: missing data for column "size"
CONTEXT: COPY metrics, line 2: "udev 3.9G 0 3.9G 0% /dev"
对于如何更正此问题以便我可以将数据插入数据库的任何帮助或建议,我将不胜感激。
您可能想试试这个:
df -Ph | awk 'BEGIN{OFS=","}NR>1{=; print}' > metric.csv
正如我在上面的评论中提到的,您的 csv 文件不是 csv。 awk 命令摆脱了“header”(我假设你 不想 在 table 中摄取)并替换 带 逗号 .
的空格关于 awk - 语句的一些解释性词语。
在 BEGIN{}
部分中,处理发生在 awk 实际处理任何输入之前。我们在这里告诉 awk 使用 ,
作为输出字段分隔符 (OFS)。默认情况下,awk 使用 任意数量的连续空格。
NR>1
告诉 awk 跳过第一行(NR == 记录数),从而省略 header.
{=;print}
- 不幸的是,awk 需要将第一个字段分配给它自己来处理该行; print
完全按照您的想法行事。