Перенаправление вывода «tail -f» для КОПИРОВАНИЯ команды

#bash #postgresql

#bash #postgresql

Вопрос:

Я пытаюсь перенаправить вывод tail -f -n 1 на команду КОПИРОВАНИЯ Postgres, требование состоит в том, чтобы выполнить команду КОПИРОВАНИЯ для каждого вывода команды tail.

Получилось следующее:

     tail -f -n 1 <source_file> | xargs -n 1 psql -c 'copy <table_name> from stdin'
  

но это не работает, так как выходные данные команды tail используются в качестве параметра для команды psql, а не как stdin.

Также более общий:

     tail -f -n 1 <source_file> | psql -tc "copy <table_name> from stdin" 
  

не работает, поскольку команда КОПИРОВАНИЯ выполняет фиксацию в конце потока, а не для каждой отдельной строки.

Комментарии:

1. Вы не сможете сделать это с COPY помощью . Напишите скрипт или программу, которая выполняет an INSERT для каждой строки ввода и передает ваш tail -f в это.

Ответ №1:

Понял, что проблема заключается в том, что COPY не предназначен для приема потоков, а данные доступны только после завершения команды КОПИРОВАНИЯ (конец данных из программы), в этом конкретном случае программа никогда не завершалась, поскольку она предназначалась для работы в качестве потребителя.