У меня синтаксическая ошибка в моей команде bash, когда я пытаюсь заполнить таблицу Postgres данными из Kafka с помощью kafkacat:
[k ~]$ kafkacat -b XXX.XX.Y.Z:9092 -t test -o 20501 -f '%k|%s|%T|%p|%o|213\n' -e | psql -c "copy raw_from_kafka(key, value, timestamp, partition, offset, load_cycle) from stdin delimiter '|'" -d dwh_dev -h XXX.ZZ.Y.ZZ -U konstantin
% Auto-selecting Consumer mode (use -P or -C to override)
ERROR: syntax error at or near "offset"
LINE 1: ... raw_from_kafka(key, value, timestamp, partition, offset, lo...
^
% ERROR: Write error for message of 34 bytes in test [0] at offset 20567: Broken pipe
Синтаксис простой, поэтому я не могу понять, почему появляется ошибка.
Как ни странно, эта ошибка появляется только тогда, когда я указываю список столбцов, которые хочу заполнить. Если я использую ту же команду, заполняющую все столбцы в таблице, все идет гладко и гладко, данные попадают в таблицу, как я хочу:
[k ~]$ kafkacat -b XXX.XX.Y.Z:9092 -t test -o 20501 -f '%k|%s|%T|%p|%o|2020-08-05 22:33:44+03|213\n' -e | psql -c "copy raw_from_kafka from stdin delimiter '|'" -d dwh_dev -h XXX.ZZ.Y.ZZ -U konstantin
% Auto-selecting Consumer mode (use -P or -C to override)
% Reached end of topic test [0] at offset 23437: exiting
Но я хочу иметь возможность заполнять только укажите c столбцы с данными из Kafka, а остальные столбцы заполнены значениями по умолчанию. Поэтому мне нужна работающая первая версия команды.
Кто-нибудь знает, почему появляется ошибка?
Postgres версия: 12 версия kafkacat: 1.6.0 Система: CentOS 7