Bash 从stdin使用COPY填充Postgres表中的特定列时出现语法错误

Bash 从stdin使用COPY填充Postgres表中的特定列时出现语法错误,bash,postgresql,kafkacat,Bash,Postgresql,Kafkacat,当我尝试使用kafkacat用Kafka中的数据填充Postgres表时,我的bash命令中出现语法错误: [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 '|'

当我尝试使用kafkacat用Kafka中的数据填充Postgres表时,我的bash命令中出现语法错误:

[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
但是我希望能够用卡夫卡的数据只填充特定的列,而其余的列则填充默认值。因此,我需要命令的第一个版本工作

有人知道为什么会出现错误吗

博士后版本:12 卡夫卡卡特版本:1.6.0
系统:CentOS 7是SQL中的保留字。如果您有一个名为
offset
的列,则需要将其双引号引起来,即
“offset”

offset
是SQL中的保留字。如果您有一个名为
offset
的列,则需要对其进行双引号引用,即
“offset”

将offset重命名为k_offset解决了问题。

将offset重命名为k_offset解决了问题。

刚刚尝试过-在同一位置出现相同错误:错误:语法错误在“offset”第1行或其附近:。。。来自卡夫卡的原始(键、值、时间戳、分区、偏移量、lo…^我认为它还会与整个查询周围的引号冲突。现在将尝试重命名所有可能为保留字的列…@KonstantinPopov“我认为它还将与整个查询周围的引号冲突”正确,这就是它不起作用的原因。您必须对双引号进行转义才能看到它们。刚刚尝试-在相同的位置得到相同的错误:错误:语法错误在“偏移”行1处或附近:…来自卡夫卡的raw_(关键字、值、时间戳、分区、偏移量、lo…^我认为它也会与整个查询中的引号冲突。现在将尝试重命名所有可能是保留字的列…@KonstantinPopov“我认为它也会与整个查询中的引号冲突“正确,这就是它不起作用的原因。为了让人看到它们,你必须避开双引号。