我想在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_ (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
任何解决方案.. !!
答案 0 :(得分:0)
首先,您需要清除前两行的文件: 那么你将创建一个表。 最后,你将插入表格。
有a few ways来清理文件,但您可以运行类似
的内容cat /tmp/test.csv|awk 'NR>2' > /tmp/test_clean.csv
然后你需要创建一个表: syntax是这样的:
CREATE TABLE system_utilzation (
ts TIME,
cpu TEXT,
user NUMERIC,
nice NUMERIC,
system NUMERIC,
iowait NUMERIC,
steal NUMERIC,
idle NUMERIC
);
如果您第一次填充表格时,可以使用COPY
或\COPY
将CSV文件插入表格。如果你想让它作为日常工作运行,你需要[INSERT][3]
它。
您可以使用空的临时表来执行此操作。每个连接的临时表是唯一的,并且在断开与Posgres的连接后将自动删除:
CREATE TEMP TABLE temp_system_utilzation AS SELECT * FROM system_utilzation WHERE 1=2;
然后,您将使用psql
和\COPY
填充它。
psql -h remotehost -d remote_mydb -U myuser -c "\copy temp_system_utilzation from '/tmp/test_clean.csv' with CSV HEADER"
最后,您可以使用以下内容从临时表中插入到完整表中:
INSERT INTO ystem_utilzation SELECT * FROM temp_system_utilzation;
答案 1 :(得分:-1)
工作答案:
使用以下命令创建.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_utilzation
INSERT INTO system_utilzation SELECT * FROM temp_system_utilzation;