相关疑难解决方法(0)

PostgreSQL 中 LIKE、SIMILAR TO 或正则表达式的模式匹配

我必须编写一个简单的查询,在其中查找以 B 或 D 开头的人名:

SELECT s.name 
FROM spelers s 
WHERE s.name LIKE 'B%' OR s.name LIKE 'D%'
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法重写它以提高性能。所以我可以避免or和/或like

postgresql index regular-expression pattern-matching string-searching

123
推荐指数
3
解决办法
18万
查看次数

为什么要在文本列上索引 text_pattern_ops ?

今天七周内的七个数据库向我介绍了每个操作员的索引。

您可以通过创建text_pattern_ops运算符类索引来为匹配先前查询的模式索引字符串,只要值以小写形式索引即可。

CREATE INDEX moves_title_pattern ON movies (
    (lower(title) text_pattern_ops);
Run Code Online (Sandbox Code Playgroud)

我们使用 是text_pattern_ops因为标题是文本类型。如果需要指数VARCHAR处理,字符,或名称,使用相关的OPS: ,varchar_pattern_opsbpchar_pattern_opsname_pattern_ops

我觉得这个例子真的很混乱。为什么这样做有用?

如果该列是文本类型,那么在用作搜索值之前,其他类型(varchar、char、name)不会被强制转换为文本吗?

该索引的行为与使用默认运算符的索引有何不同?

CREATE INDEX moves_title_pattern ON movies (lower(title));
Run Code Online (Sandbox Code Playgroud)

postgresql index collation pattern-matching

23
推荐指数
1
解决办法
2万
查看次数

如何从 PostgreSQL 中的 jsonb 数组中获取特定对象?

我有一个名为“user”的字段,其中包含一个大致如下所示的 json 数组:

"user"

[{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}]
Run Code Online (Sandbox Code Playgroud)

现在我想要一个像这样的查询:

select count from tablename where id = "1"
Run Code Online (Sandbox Code Playgroud)

我无法count从 PostgreSQL 9.4 中的 json 对象数组中获取特定字段。

postgresql array json postgresql-9.4

21
推荐指数
1
解决办法
7万
查看次数

使用 PostgreSQL 进行全文搜索

我有一个包含这些行的表:

Stickers
------------------------------------------------------
ID | Title                 |Keywords (ts_vector)
------------------------------------------------------
01 | Sticker Case 580H     |'580h':3 'cas':2 'stick':1
02 | Sticker Case 580L     |'580l':3 'cas':2 'stick':1
03 | Sticker Case 580      |'580':3 'cas':2 'stick':1
04 | Sticker Case Plus 3000|'3000':4 'cas':2 'plus':3 'stick':1
Run Code Online (Sandbox Code Playgroud)

好吧,当我使用这个脚本进行搜索时,只返回第 03 行,我如何返回第 01 和 02 行?

SELECT
*
FROM
stickers
WHERE
keywords @@@ to_tsquery('case & 580');
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search postgresql-9.2

5
推荐指数
2
解决办法
2145
查看次数

text_pattern_ops 和 COLLATE "C" 之间有区别吗?

name例如,如果我有一个带有排序规则的文本列tr-TR,并且我运行一个查询

SELECT * FROM t WHERE name LIKE 'a%'
Run Code Online (Sandbox Code Playgroud)

然后这将进行 seq 扫描。

如果我现在创建一个索引

CREATE INDEX ON t(name text_pattern_ops)
Run Code Online (Sandbox Code Playgroud)

上面的查询将变成位图扫描。但还有另一种技术可以达到相同的结果:

CREATE INDEX ON t(name COLLATE "C")
Run Code Online (Sandbox Code Playgroud)

这些方法完全等同还是存在差异?

postgresql index collation

3
推荐指数
1
解决办法
3527
查看次数