To_tsvector() inside of bulk COPY FROM STDIN Postgres

To_tsvector() inside of bulk COPY FROM STDIN Postgres

我正在将一个 CSV 文件批量加载到 Postgres 中,而不是每次插入记录时都使用数据库触发器来更新 ts_vector 列,我尝试使用 COPY FROM STDIN 插入看起来像

的记录

"some text value", to_tsvector('English', 'some text value')

看看我是否有任何性能提升。我可以使用 INSERT INTO tablename VALUES () 语句从 Postgres shell 手动执行此操作,但是当我从 COPY FROM 执行此操作时,我得到一个 ERROR: extra data after last expected column,我认为这意味着我的语法不正确。

如有任何帮助,我们将不胜感激!

您不能在 COPY 中使用函数。它只允许实际值。您将需要使用 INSERT 语句或创建触发器来更新您的 tsvector。

或者,您可以尝试手动生成适当的 tsvector 字符串,但这不值得这么麻烦(容易出错,而且可能不会更快)。

格式如下:

postgres=> SELECT to_tsvector('The quick brown fox jumped over the lazy dog.');
                  to_tsvector                      
-------------------------------------------------------
 'brown':3 'dog':9 'fox':4 'jump':5 'lazi':8 'quick':2
(1 row)

postgres=>