To_tsvector() внутри массива COPY FROM STDIN Postgres

Я массово загружаю файл CSV в Postgres, и вместо того, чтобы использовать триггеры базы данных для обновления столбца ts_vector каждый раз, когда я вставляю запись, я пытаюсь попытаться вставить с помощью COPY FROM STDIN с записями, которые выглядят как

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

посмотрим, получу ли я какое-либо увеличение производительности. Я могу сделать это вручную из оболочки Postgres с помощью оператора INSERT INTO tablename VALUES (), но когда я делаю это из COPY FROM, я получаю ERROR: extra data after last expected column что я предполагаю, означает, что мой синтаксис не является правильным.

Любая помощь с этим будет высоко ценится!

1 ответ

Решение

Вы не можете использовать функции в 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=> 
Другие вопросы по тегам