sql - 将带有冒号“:”的字符串添加到“tsvector”数据类型时出错
问题描述
在我的 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”不能存储这样的字符,我该如何实现全文搜索?
PS 使用“text”或“char”不是解决方案;搜索此类数据类型非常慢。我通过解析组 vk.com(俄罗斯社交网络)得到这些行,即所有现有组的名称。我需要保留这些名称的完整形式,以便用户可以在我的网站上找到它们。但任何解决方案都会帮助我。
解决方案
用于规范化字符串并返回to_tsvector
a :tsvector
INSERT INTO ...
VALUES (%s,to_tsvector(%s),%s,%s)''', a[i])
请注意,转换为 tsvector 在这里不起作用:
unutbu=# select 'Reggae.FM:'::tsvector;
ERROR: syntax error in tsvector: "Reggae.FM:"
LINE 1: select 'Reggae.FM:'::tsvector
^
这是to_tsvector
返回:
unutbu=# select to_tsvector('Reggae.FM:');
+---------------+
| to_tsvector |
+---------------+
| 'reggae.fm':1 |
+---------------+
(1 row)
推荐阅读
- circuit-sdk - 如何格式化使用 REST API 发送的消息的文本?
- django-rest-framework - drf-yasg,仅查看某些端点的更简单方法?
- php - 防止不相关的mysql数据
- bokeh - 散景 - 设置轴上的小数位数
- python - Selenium 模拟鼠标滚轮下拉和 webdriverwait 替代 time.sleep
- c - 我可以使用什么更准确的算法来计算数字的正弦?
- javascript - 从 JSON 构建的对象数组未显示在我的 Google 地图上
- ajax - 尝试编辑/更新时出现 DBContext 错误
- javascript - 将 IP 地址传递给请求正文的问题
- c++ - 在使用 curses.h 中未定义对“stdscr”和“wgetch”的引用