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=>
我正在将一个 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=>