2017-01-13 2 views
1

Je charge en masse un fichier CSV dans Postgres, et au lieu d'utiliser les déclencheurs de base de données pour mettre à jour la colonne ts_vector chaque fois que j'insère un enregistrement, j'essaye d'insérer un COPIE dE STDIN avec des documents qui ressemblent àTo_tsvector() à l'intérieur de bulk COPY FROM STDIN Postgres

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

voir si je reçois une augmentation de la performance. Je peux le faire manuellement à partir du shell Postgres avec une instruction INSERT INTO nom_table VALUES(), mais quand je le fais depuis COPY FROM, j'obtiens un ERROR: extra data after last expected column qui, je suppose, signifie que ma syntaxe n'est pas correcte.

Une aide avec ceci serait grandement appréciée!

Répondre

1

Vous ne pouvez pas utiliser les fonctions dans COPY. Cela ne permet que les valeurs réelles. Vous devrez utiliser les instructions INSERT ou créer un déclencheur pour mettre à jour votre tsvector.

Alternativement, vous pourriez essayer de générer la chaîne tsvector appropriée à la main, mais cela ne vaudrait pas la peine (erreur sujette et probablement pas plus rapide).

Voici ce que le format ressemble:

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