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=>