相关疑难解决方法(0)

复合索引是否也适用于第一个字段的查询?

假设我有一个包含字段A和的表B。我在A+上进行常规查询B,所以我在 上创建了一个复合索引(A,B)A复合索引是否也会对查询进行全面优化?

此外,我在 上创建了一个索引A,但 Postgres 仍然只使用复合索引来查询A。如果前面的答案是肯定的,我想这并不重要,但是为什么它默认选择复合索引,如果单个A索引可用?

postgresql performance index database-design index-tuning

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

选择 json_agg 中的列

我有一个查询,如:

SELECT a.id, a.name, json_agg(b.*) as "item"
  FROM a
  JOIN b ON b.item_id = a.id
 GROUP BY a.id, a.name;
Run Code Online (Sandbox Code Playgroud)

如何选择在列b,所以我没有b.item_id在JSON对象?

我读过关于ROW,但它返回一个 JSON 对象,如:

{"f1": "Foo", "f2": "Bar"}
Run Code Online (Sandbox Code Playgroud)

一旦获取它以匹配正确的列键,我将需要重新映射 JSON 对象。我想避免这种情况并保留原始列名。

postgresql group-by row json

41
推荐指数
4
解决办法
10万
查看次数

如何使用数组作为 PostgreSQL 中 VARIADIC 函数的参数?

我正在尝试json_extract_path_text()使用citext模块制作不区分大小写的版本。

我希望这是一个围绕内置函数的简单包装器,唯一的区别是它接受citext作为第一个参数而不是json. 我希望这是对本机实现的直接传递,只需事先进行类型转换。这是我到目前为止所拥有的:

create extension citext;

create or replace function json_extract_path_text ( string citext, variadic params text[]) RETURNS text IMMUTABLE AS
$$
    BEGIN
        SELECT json_extract_path_text(string::json, params);
    END;
$$
LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

但是,由于类型不匹配,这不能正常工作:

ERROR:  function json_extract_path_text(json, text[]) does not exist
LINE 1: SELECT json_extract_path_text(string::json, params)
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
QUERY:  SELECT json_extract_path_text(string::json, params)
CONTEXT:  PL/pgSQL function json_extract_path_text(citext,text[]) line 3 …
Run Code Online (Sandbox Code Playgroud)

postgresql parameter functions array case-sensitive

10
推荐指数
1
解决办法
6472
查看次数

Postgres 绕过带有 100 多个值的 IN 子句的索引?

在另一个论坛上遇到了这个:

PG 对于IN查询中的值的限制为 100,之后不使用所述列上的索引。例如:SELECT ... WHERE IN (...)如果 IN 列表超过 100,则对 PK的典型查询将变成全表扫描。

我无法找到任何关于此的信息。PG 有没有这样的限制(我是这么想的),如果有,这个限制是多少?

我知道有时在临时表中使用大型子选择会更好,但是了解截止位置会很有帮助。

postgresql performance index execution-plan postgresql-performance

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