PostgreSQL数据库中Linux系统利用率导入
我想在PostgreSQL数据库中导入每日Linux系统利用率文件PostgreSQL数据库中Linux系统利用率导入,linux,postgresql,redhat,Linux,Postgresql,Redhat,我想在PostgreSQL数据库中导入每日Linux系统利用率文件 # ls /var/log/sa sar -f sa13 >>/tmp/test_clean.csv 我可以使用上面的命令生成一个.csv文件,但这种格式允许我导入PostgreSQL数据库 root#> less /tmp/test_clean.csv <Linux redhat version> (servername) <date> _x86_64_
# ls /var/log/sa
sar -f sa13 >>/tmp/test_clean.csv
我可以使用上面的命令生成一个.csv文件,但这种格式允许我导入PostgreSQL数据库
root#> less /tmp/test_clean.csv
<Linux redhat version> (servername) <date> _x86_64_ (2 CPU)
12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 0.10 0.00 0.05 0.02 0.00 99.83
12:20:01 AM all 0.12 0.00 0.06 0.02 0.00 99.80
12:30:01 AM all 0.08 0.00 0.05 0.02 0.00 99.85
12:40:01 AM all 0.06 0.00 0.05 0.02 0.00 99.88
12:50:01 AM all 0.07 0.00 0.05 0.02 0.00 99.86
01:00:01 AM all 0.09 0.00 0.05 0.02 0.00 99.84
01:10:01 AM all 0.07 0.00 0.05 0.02 0.00 99.86
任何解决方案 首先,您需要清除前两行中的文件: 然后您将创建一个表。 最后,将插入到表中 有很多方法可以清理文件,但您可以运行以下操作
cat /tmp/test.csv|awk 'NR>2' > /tmp/test_clean.csv
然后需要创建一个表:
问题是这样的:
CREATE TABLE system_utilzation (
ts TIME,
cpu TEXT,
user NUMERIC,
nice NUMERIC,
system NUMERIC,
iowait NUMERIC,
steal NUMERIC,
idle NUMERIC
);
如果是第一次填充表格,可以使用COPY或\COPY将CSV文件插入表格。如果希望此作业作为常规作业运行,则需要[插入][3]它
您可以使用一个空的临时表来实现这一点。每个连接的临时表都是唯一的,并且在您断开与Posgres的连接后将自动删除:
创建TEMP TABLE TEMP_system_utilization作为SELECT*FROM system_utilization,其中1=2;
然后您将使用psql和\COPY填充它
最后,您可以使用以下方法将临时表插入完整表:
在系统使用中插入从临时系统使用中选择* 工作答案:
使用以下命令创建.csv文件
sadf -dh -- -p| tr ';' ','| awk 'NR>1{print $0}' > /tmp/test_clean.csv
然后,创建表
CREATE TABLE system_utilzation (
hostname text,
interval text,
ts TIME,
cpu TEXT,
users NUMERIC,
nice NUMERIC,
system NUMERIC,
iowait NUMERIC,
steal NUMERIC,
idle NUMERIC
);
使用以下命令创建临时表
CREATE TEMP TABLE temp_system_utilzation AS SELECT * FROM system_utilzation WHERE 1=2;
将数据从.csv文件导入表
copy temp_system_utilzation from '/tmp/test_clean.csv' with CSV HEADER;
然后将数据插入名为system_Utilization的主表中
demo=使用csv头从“/tmp/test\u clean.csv”复制临时系统使用;错误:类型时间戳的输入语法无效:12:10:01 AM all 0.10 0.00 0.05 0.02 0.00 99.83上下文:复制临时系统使用,第2行,列ts:12:10:01 AM all 0.10 0.00 0.05 0.02 0.00 99.83演示=最好将其从时间戳更改为时间戳这可能意味着您没有csv文件。试着按照这个方法来确保你有一个csv文件,因为你可能有一个带有空格的文件awk'NR>3{print$0}感谢它对我有用,但在CPU列中它显示的是-1而不是全部。这不是csv文件,请更新问题以显示文件的实际格式,提供
copy temp_system_utilzation from '/tmp/test_clean.csv' with CSV HEADER;
INSERT INTO system_utilzation SELECT * FROM temp_system_utilzation;