#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
помощью . Напишите скрипт или программу, которая выполняет anINSERT
для каждой строки ввода и передает вашtail -f
в это.
Ответ №1:
Понял, что проблема заключается в том, что COPY не предназначен для приема потоков, а данные доступны только после завершения команды КОПИРОВАНИЯ (конец данных из программы), в этом конкретном случае программа никогда не завершалась, поскольку она предназначалась для работы в качестве потребителя.