PostgreSQL数据库中的Linux系统利用率导入

时间:2018-06-14 16:05:21

标签: 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_        (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

任何解决方案.. !!

2 个答案:

答案 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)

工作答案:

  1. 使用以下命令创建.csv文件。

    sadf -dh -- -p| tr ';' ','| awk 'NR>1{print $0}' > /tmp/test_clean.csv
    
  2. 然后,创建表

    CREATE TABLE system_utilzation (
         hostname  text,
         interval  text,
         ts       TIME,
         cpu      TEXT,
         users     NUMERIC,
         nice     NUMERIC,
         system     NUMERIC,
         iowait      NUMERIC, 
         steal      NUMERIC,
         idle     NUMERIC
        );
    
  3. 使用以下命令创建临时表。

     CREATE TEMP TABLE temp_system_utilzation AS SELECT * FROM system_utilzation WHERE 1=2;
    
  4. 将.csv文件中的数据导入表格。

    copy temp_system_utilzation from '/tmp/test_clean.csv' with CSV HEADER;
    
  5. 然后将数据插入主表 system_utilzation

    INSERT INTO system_utilzation SELECT * FROM temp_system_utilzation;