将带有冒号“:”的字符串添加到“ tsvector”数据类型时出错

时间:2019-02-14 03:29:16

标签: sql database postgresql

在我的PostgreSQL 11数据库中,有一个“名称”列,其数据类型为“ tsvector”,用于实现全文搜索。

但是当我尝试将包含冒号“:”的条目添加到此列时,会发生错误:

Exception in thread Thread-10:
Traceback (most recent call last):
  File "C:\Program Files\Python37\lib\threading.py", line 917, in_bootstrap_inner
    self.run()
  File "C:\Program Files\Python37\lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\vs\Desktop\Арсений execute\allsave.py", line 209, in group_parsing
    VALUES (%s,%s,%s,%s)''', a[i])
psycopg2.ProgrammingError: ERROR: syntax error in tsvector: "Reggae.FM:"
LINE 3:         VALUES (181649,'Reggae.FM:'

当我将此数据添加到“文本”字段类型时,没有问题。但是显然“ tsvector”不接受包含冒号“:”以及其他字符的字符串。

问题是,如果“ tsvector”无法存储此类字符,我该如何实施全文搜索?

P.S。使用“文本”或“字符”不是解决方案;搜索此类数据类型非常慢。 我通过解析组vk.com(俄罗斯社交网络),即所有现有组的名称来获得这些行。我需要将这些名称保留完整格式,以便用户可以在我的网站上找到它们。但是任何解决方案都会帮助我。

1 个答案:

答案 0 :(得分:1)

使用function someFunction() { var vOne = document.getElementById("license_type"); var options = vOne.getElementsByTagName("option"); var [c1, c2, c3] = options.map(e => e.getAttribute("data-one")); } normalize the string并返回to_tsvector

tsvector

请注意,将tsvector强制转换在这里不起作用:

INSERT INTO ...
VALUES (%s,to_tsvector(%s),%s,%s)''', a[i])

这是unutbu=# select 'Reggae.FM:'::tsvector; ERROR: syntax error in tsvector: "Reggae.FM:" LINE 1: select 'Reggae.FM:'::tsvector ^ 返回的内容:

to_tsvector