Linux PostgreSQL 数据库中的系统利用率导入
Linux system utilization import in PostgreSQL Database
我想在 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
任何解决方案..!!
首先你需要清理前两行的文件:
那么您将创建一个 table。
最后,您将插入 table.
有 a few ways 清理文件,但您可以 运行 类似
cat /tmp/test.csv|awk 'NR>2' > /tmp/test_clean.csv
然后您需要创建一个 table:
syntax 是这样的:
CREATE TABLE system_utilzation (
ts TIME,
cpu TEXT,
user NUMERIC,
nice NUMERIC,
system NUMERIC,
iowait NUMERIC,
steal NUMERIC,
idle NUMERIC
);
如果这是您第一次填充 table,可以使用 COPY
或 \COPY
将 CSV 文件插入您的 table。如果你想 运行 作为日常工作,你会想要 [INSERT][3]
它。
您可以使用空的临时文件 table 来做到这一点。 temp table 每个连接都是唯一的,在您与 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"
最后,您可以使用如下方式从临时 table 插入完整 table:
INSERT INTO ystem_utilzation SELECT * FROM temp_system_utilzation;
有效答案:
使用以下命令创建 .csv 文件。
sadf -dh -- -p| tr ';' ','| awk 'NR>1{print [=10=]}' > /tmp/test_clean.csv
然后,创建 table
CREATE TABLE system_utilzation (
hostname text,
interval text,
ts TIME,
cpu TEXT,
users NUMERIC,
nice NUMERIC,
system NUMERIC,
iowait NUMERIC,
steal NUMERIC,
idle NUMERIC
);
使用以下命令创建一个临时文件 table。
CREATE TEMP TABLE temp_system_utilzation AS SELECT * FROM system_utilzation WHERE 1=2;
将数据从 .csv 文件导入到 table。
copy temp_system_utilzation from '/tmp/test_clean.csv' with CSV HEADER;
然后插入数据到主table调用system_utilzation
INSERT INTO system_utilzation SELECT * FROM temp_system_utilzation;
我想在 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
任何解决方案..!!
首先你需要清理前两行的文件: 那么您将创建一个 table。 最后,您将插入 table.
有 a few ways 清理文件,但您可以 运行 类似
cat /tmp/test.csv|awk 'NR>2' > /tmp/test_clean.csv
然后您需要创建一个 table: syntax 是这样的:
CREATE TABLE system_utilzation (
ts TIME,
cpu TEXT,
user NUMERIC,
nice NUMERIC,
system NUMERIC,
iowait NUMERIC,
steal NUMERIC,
idle NUMERIC
);
如果这是您第一次填充 table,可以使用 COPY
或 \COPY
将 CSV 文件插入您的 table。如果你想 运行 作为日常工作,你会想要 [INSERT][3]
它。
您可以使用空的临时文件 table 来做到这一点。 temp table 每个连接都是唯一的,在您与 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"
最后,您可以使用如下方式从临时 table 插入完整 table:
INSERT INTO ystem_utilzation SELECT * FROM temp_system_utilzation;
有效答案:
使用以下命令创建 .csv 文件。
sadf -dh -- -p| tr ';' ','| awk 'NR>1{print [=10=]}' > /tmp/test_clean.csv
然后,创建 table
CREATE TABLE system_utilzation ( hostname text, interval text, ts TIME, cpu TEXT, users NUMERIC, nice NUMERIC, system NUMERIC, iowait NUMERIC, steal NUMERIC, idle NUMERIC );
使用以下命令创建一个临时文件 table。
CREATE TEMP TABLE temp_system_utilzation AS SELECT * FROM system_utilzation WHERE 1=2;
将数据从 .csv 文件导入到 table。
copy temp_system_utilzation from '/tmp/test_clean.csv' with CSV HEADER;
然后插入数据到主table调用system_utilzation
INSERT INTO system_utilzation SELECT * FROM temp_system_utilzation;