2017-01-13 2 views
1

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

"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=> 
Смежные вопросы