Как вставить вывод команды Linux df -ht ext4 в таблицу базы данных - PullRequest
1 голос
/ 08 июля 2020

Может ли кто-нибудь помочь мне показать, как вставить данные команды Linux в таблицу

Пример:

postgres@PTFPG01:/root$ df -ht ext4
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        98G   15G   79G  16% /
/dev/sdb1       2.0T  921G 1008G  48% /data

Я пробовал использовать канал со вставкой, и это дает мне ошибку :

root@PTFPG01:~# df -ht ext4 | psql -d DBA_Monitoring -p 6432 -U postgres -W Olxoo30 -c " insert into driver_size values()"
psql: warning: extra command-line argument "Olxoo30" ignored
Password:
ERROR:  syntax error at or near ")"
LINE 1:  insert into driver_size values() 

create table driver_size (
Filesystem varchar (50),  
Size varchar (10), 
Used varchar (10),
Avail varchar (10),
Use varchar (10),
Mounted_on  varchar (100)
); 

Кто-нибудь может помочь мне показать, как я могу вставить данные в таблицу?

Ответы [ 2 ]

2 голосов
/ 08 июля 2020

У вас работает?

df -ht ext4 | tail -n+2 | sed -E "s/ +/\t/g"  | psql -d DBA_Monitoring -p 6432 -U postgres -W Olxoo30 -c 'copy driver_size from stdin;'
1 голос
/ 08 июля 2020

Ключ -W не принимает ваш пароль в качестве аргумента; она заставляет программу запрашивать пароль с клавиатуры, минуя другие механизмы его получения. Вместо этого вам следует договориться о предоставлении пароля с помощью одного из этих других механизмов (PGPASSWORD, .pgpass, et c.), А не их обхода.

PostgreSQL не имеет режима КОПИРОВАНИЯ, который поддерживает один или несколько пробелов в качестве единственного разделителя, поэтому вам понадобится какая-то другая программа для массажа вывода. Для этого я выбрал sed. Может возникнуть проблема, если в каком-либо из ваших полей есть буквальные пробелы.

Поскольку текстовый формат COPY не поддерживает параметр HEADER, я вместо этого использую tail для удаления строки заголовка. Сложите их вместе и:

df -ht ext4 | sed 's/\s\s*/\t/g' | tail +2 | psql -c 'copy driver_size from stdin'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...