Синтаксическая ошибка при использовании COPY для заполнения указанных c столбцов в Postgres таблице из стандартного ввода - PullRequest
0 голосов
/ 06 августа 2020

У меня синтаксическая ошибка в моей команде 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

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

offset - зарезервированное слово в SQL. Если у вас есть столбец с именем offset, вам нужно заключить его в двойные кавычки, ie. "offset".

0 голосов
/ 06 августа 2020

Переименование смещения в k_offset устранило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...