相关疑难解决方法(0)

查询参数(postgresql.conf设置),如"max_connections"

有谁知道在PostgreSQL(9.1)中查询数据库服务器设置是否可行(以及如何,如果是)?

我需要查看max_connections(最大打开数据库连接数)设置.

postgresql settings configuration postgresql-9.1

106
推荐指数
1
解决办法
8万
查看次数

PostgreSQL LIKE查询性能变化

关于LIKE查询数据库中特定表的响应时间,我看到了相当大的变化.有时我会在200-400毫秒内得到结果(非常可接受),但有时候返回结果可能需要30秒.

我知道LIKE查询是非常耗费资源的,但我只是不明白为什么响应时间会有这么大的差异.我已经在该owner1字段上构建了一个btree索引,但我认为这对LIKE查询没有帮助.有人有主意吗?

示例SQL:

SELECT gid, owner1 FORM parcels
WHERE owner1 ILIKE '%someones name%' LIMIT 10
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

SELECT gid, owner1 FROM parcels
WHERE lower(owner1) LIKE lower('%someones name%') LIMIT 10
Run Code Online (Sandbox Code Playgroud)

和:

SELECT gid, owner1 FROM parcels
WHERE lower(owner1) LIKE lower('someones name%') LIMIT 10
Run Code Online (Sandbox Code Playgroud)

有类似的结果.
表行数:约95,000.

postgresql indexing query-optimization pattern-matching sql-like

103
推荐指数
3
解决办法
7万
查看次数

SQLAlchemy可以做什么,Django ORM不能做的例子

我最近在使用Pyramid和SQLAlchemy进行了大量的研究,而不是在Django中保留当前的应用程序.这本身就是一场辩论,但我不是在讨论这个问题.

我想知道的是,为什么SQLAlchemy普遍被认为比Django ORM更好?几乎每一个(如果不是每一个)我在SQLAlchemy这两个好处之间找到的比较.我认为性能是一个很大的性能,因为SQLAlchemy的结构可以让它更顺利地转换为SQL.

但是,我也听说过,使用更难的任务,Django ORM几乎不可能使用.我想说明这可能是一个多大的问题.我一直在阅读切换到SQLAlchemy的原因之一是当Django ORM不再适合您的需求时.

因此,简而言之,有人可以提供SQLAlchemy可以执行的查询(不一定是实际的SQL语法),但Django ORM不可能在没有添加额外的原始SQL的情况下做到吗?

更新:

自从我第一次问到这个问题以来,我一直注意到这个问题得到了很多关注,所以我想多花两美分.

最后我们最终使用了SQLAlchemy,我必须说我对这个决定感到满意.

我正在重新审视这个问题以提供SQLAlchemy的一个额外功能,到目前为止,我还没有能够在Django ORM中复制.如果有人可以提供一个如何做到这一点的例子,我会很乐意吃掉我的话.

假设您想使用一些postgresql函数,例如similarity(),它提供模糊比较(请参阅:快速查找与PostgreSQL类似的字符串 - tl; dr输入两个字符串获得百分比相似性).

我已经用Django ORM做了一些关于如何做到这一点的搜索,除了使用原始的sql之外什么也没发现,因为他们的文档中似乎很明显:https://docs.djangoproject.com/en/dev/topics/db/sql /.

Model.objects.raw('SELECT * FROM app_model ORDER BY \
similarity(name, %s) DESC;', [input_name])
Run Code Online (Sandbox Code Playgroud)

但是,SQLalchemy有func(),如下所述:http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.func

from sqlalchemy import desc, func
session.query(Model).order_by(func.similarity(Model.name, input_name))
Run Code Online (Sandbox Code Playgroud)

这允许您为任何已定义的sql/postgresql/etc函数生成sql,而不需要原始sql.

python sqlalchemy django-orm

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

GiST和GIN指数之间的差异

我正在实现一个具有数据类型为的列的表,tsvector我试图了解哪个索引更适合使用?

GIN还是GiST?

通过这里查看postgres文档,我似乎得到了:

  • GiST更新和构建索引的速度更快,而且比杜松子酒更准确.

  • GIN更新和构建索引的速度较慢,但​​更准确.

好的,那么为什么有人想要杜松子酒的gist索引字段呢?如果要点可能会给你错误的结果?必须有一些优势(外部表现).

当我想要使用GIN和GiST时,有人可以用外行的方式解释吗?

postgresql indexing full-text-search

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

具有异构数据类型的3个字段的多列索引

我有一个包含3个字段的postgres表:

  • a:postgis几何
  • b:array varchar []
  • c:整数

我有一个涉及所有这些问题的查询.我想添加一个多列索引来加速它,但我不能因为它们的性质而不能将3个字段放在同一个索引下.

这种情况下的策略是什么?添加3个索引gist,gin和btree以及postgres将在查询期间使用它们吗?

postgresql indexing postgis postgresql-performance

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

设置pg_trgm的默认限制

这似乎是一个非常基本的问题,但如何更改pg_trgm扩展名的默认限制?目前是0.3.我已经做好了:

select set_limit(0.5)
select show_limit() => 0.5
Run Code Online (Sandbox Code Playgroud)

关闭连接,重新连接:

select show_limit() => 0.3
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

postgresql full-text-search

6
推荐指数
2
解决办法
1781
查看次数

如何使用 pg_trgm 改进或加速 Postgres 查询?

我可以采取任何其他步骤来加快查询执行速度吗?

\n

我有一个超过 100m 行的表,我需要搜索匹配的字符串。为此,我检查了两个选项:

\n
    \n
  1. 将文本与 to_tsvector @@(to_tsquery 或 plainto_tsquery)进行比较
    \n这工作得非常快(所有数据都在 1 秒以下),但在查找文本相似性方面存在一些问题
  2. \n
  3. 将文本与 pg_trgm 相似度进行比较\n这对于文本比较效果很好,但对于大量数据则效果不佳。
  4. \n
\n

我发现我可以使用索引来提高性能。\n对于我的 GiST 索引,我尝试siglen从小数字增加到 2024,但由于某种原因 Postgres 使用512而不是更高。

\n
CREATE INDEX trgm_idx_512_gg ON table USING GIST (name gist_trgm_ops(siglen=512));\n
Run Code Online (Sandbox Code Playgroud)\n

询问:

\n
SELECT name, similarity(name, '\xd0\xbd\xd0\xbe\xd1\x83\xd1\x82\xd0\xb1\xd1\x83\xd0\xba MSI GF63 Thin 10SC 086XKR 9S7 16R512 086') as sm\nFROM table\nWHERE name % '\xd0\xbd\xd0\xbe\xd1\x83\xd1\x82\xd0\xb1\xd1\x83\xd0\xba MSI GF63 Thin 10SC 086XKR 9S7 16R512 086' \n
Run Code Online (Sandbox Code Playgroud)\n

EXPLAIN输出:

\n
Bitmap Heap Scan on …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-performance pg-trgm

6
推荐指数
1
解决办法
1607
查看次数

PostgreSQL在select查询中重用计算结果

例如,使用SQL我可以做:

SELECT (a+b) as c FROM table WHERE c < 5 AND (c*c+t) > 100;
Run Code Online (Sandbox Code Playgroud)

使用Postgres有什么办法吗?

sql postgresql

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

Postgresql:两列之间的匹配模式

我有两栏说MainSub。(它们可以在同一张桌子上,也可以不在同一张桌子上)。

Main是长度为20 Sub的varchar,长度为8的varchar。始终
Sub是的子集,并且是的后8个字符。MainMain

我可以成功设计一个查询来匹配使用模式 substr("Main",13,8)

查询:

select * from "MainTable"
 where substr("MainColumn",13,8) LIKE (
   select "SubColumn" From "SubTable" Where "SubId"=1043);
Run Code Online (Sandbox Code Playgroud)

但我想在查询中使用Like,%,_等,以便可以轻松地匹配模式(不是全部8个字符)。

问题是我该怎么做?!

我知道下面的查询是完全错误的,但是我想实现这样的目标,

Select * from "MainTable"
 Where "MainColumn" Like '%' Select "SubColumn" From "SubTable" Where "SubId"=2'
Run Code Online (Sandbox Code Playgroud)

postgresql pattern-matching

4
推荐指数
1
解决办法
8346
查看次数

为什么 postgres trigram word_similarity 函数不使用 gin 索引?

postgres trigram 文档指出:

pg_trgm 模块提供 GiST 和 GIN 索引运算符类,允许您在文本列上创建索引,以实现非常快速的相似性搜索。这些索引类型支持上述相似性运算符,并且还支持 LIKE、ILIKE、~ 和 ~* 查询的基于三元组的索引搜索。

并显示以下示例:

SELECT t, word_similarity('word', t) AS sml
  FROM test_trgm
  WHERE 'word' <% t
  ORDER BY sml DESC, t;
Run Code Online (Sandbox Code Playgroud)

惊人的!

但是,当运行以下查询时:

SELECT * 
FROM place 
WHERE word_similarity(place.name, '__SOME_STRING__') > 0.5
Run Code Online (Sandbox Code Playgroud)

创建的索引未被使用。

然而,当使用ILIKEor%>运算符时,看起来确实正在使用索引。为什么函数上不使用索引word_similarity

sql postgresql indexing trigram

4
推荐指数
1
解决办法
2051
查看次数

PostgreSQL:查找最接近给定句子的句子

我有一张带有句子标题的图像表。给定一个新句子,我想根据新句子与存储的旧句子的接近程度,找到与之最匹配的图像。

我知道我可以将@@运算符与a一起使用,to_tsquerytsquery可以接受特定单词作为查询。

一个问题是我不知道如何将给定的句子转换为有意义的查询。该句子可能带有标点符号和数字。

但是,我也觉得我需要某种余弦相似性,但我不知道如何从PostgresQL中获得它。我正在使用最新的GA版本,如果可以解决我的问题,很高兴使用开发版本。

postgresql full-text-search tf-idf cosine-similarity

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

用于自动完成字段的类似UTF-8字符串

背景

用户可以键入名称,系统应与文本匹配,即使用户输入或数据库字段包含重音(UTF-8)字符也是如此.这是使用该pg_trgm模块.

问题

代码类似于以下内容:

  SELECT
    t.label
  FROM
    the_table t
  WHERE
    label % 'fil'
  ORDER BY
    similarity( t.label, 'fil' ) DESC
Run Code Online (Sandbox Code Playgroud)

当用户键入时fil,查询匹配filbert但不匹配filé powder.(因为重音字符?)

解决方案#1失败

我试图实现一个unaccent函数并将查询重写为:

  SELECT
    t.label
  FROM
    the_table t
  WHERE
    unaccent( label ) % unaccent( 'fil' )
  ORDER BY
    similarity( unaccent( t.label ), unaccent( 'fil' ) ) DESC
Run Code Online (Sandbox Code Playgroud)

这只返回filbert.

解决方案#2失败

建议:

CREATE EXTENSION pg_trgm;
CREATE EXTENSION unaccent;

CREATE OR REPLACE FUNCTION unaccent_text(text)
  RETURNS text AS
$BODY$
  SELECT unaccent($1); …
Run Code Online (Sandbox Code Playgroud)

postgresql similarity utf-8 plpgsql string-comparison

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