小编Gab*_*ger的帖子

为什么计划时间和执行时间如此不同Postgres?

我提出这样的问题

EXPLAIN (ANALYZE ,BUFFERS )
        SELECT COUNT(id) q, day
        FROM my_table
        WHERE role_id && ARRAY[15, 17]
        GROUP BY "day"
        ORDER BY "day" DESC;
Run Code Online (Sandbox Code Playgroud)

Postgres用这个回复我:

规划时间:0.286 ms
执行时间:127.233 ms

为什么是这样 ?我认为差异太大了

postgresql query-planner

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

为什么不能将索引扫描用于使用COALESCE创建的索引?

PostgreSQL 9.4该表创建如下:

CREATE TABLE foo (
    id integer,
    date date,
    value numeric(14,3)
);
Run Code Online (Sandbox Code Playgroud)

我正在使用ROW_NUMBER()窗口函数优化查询COALESCE.为了最有效,我倾向于Index Only Scan在以下查询中使用:

SELECT id, c_val
FROM (
    SELECT id, COALESCE(value, 0) c_val, ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC NULLS LAST) rn
    FROM foo) sbt
WHERE sbt.rn = 1;
Run Code Online (Sandbox Code Playgroud)

所以,如果我创建索引如下:

CREATE INDEX ON foo (id, date DESC NULLS LAST, value);
Run Code Online (Sandbox Code Playgroud)

规划师选择使用Index Only Scan,但如果我这样做:

CREATE INDEX ON foo (id, date DESC NULLS LAST, COALESCE(value, 0));
Run Code Online (Sandbox Code Playgroud)

规划师会做的Index Scan …

sql postgresql indexing internals

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

在PostgreSQL中重命名多个列

我的表有以下格式的一堆列:

_settingA
_settingB
_settingB
Run Code Online (Sandbox Code Playgroud)

我想重命名它们只是添加一个前缀,如下所示:

_1_settingA
_1_settingB
_1_settingC
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最快捷/最有效的方法是什么?

编辑:我要补充一点,我有很多超过三列以这种方式重新命名.如果我只有三个,我会一个接一个地手动完成.并感谢你无论你是谁.

sql postgresql ddl automation sql-update

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

将两列和行聚合为一列

我有以下表结构

start|end
09:00|11:00
13:00|14:00
Run Code Online (Sandbox Code Playgroud)

我知道

SELECT ARRAY_AGG(start), ARRAY_AGG(end)
Run Code Online (Sandbox Code Playgroud)

将会导致

start|end
[09:00,13:00]|[11:00,14:00]
Run Code Online (Sandbox Code Playgroud)

但我怎样才能得到下面的结果呢?结果

[09:00,11:00,13:00,14:00]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我正在使用 Postgres

sql postgresql aggregate aggregate-functions

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

如何安全地截断并重新填充 PostgreSQL 中的表?

我的数据库中的一张表必须每天更新。Web 服务器每 5 秒主动查询此表。现在,UPDATE由于某些限制,我不能简单地处理表格行,因此我需要清除所有行并重新填充表格。如何在不影响 Web 服务器功能的情况下安全地执行此操作?重新填充由与 Web 服务器隔离的其他 Web 服务完成。我正在使用 Spring 框架。

桌子上有大约。170k 行和 5 列。

postgresql spring

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

PostgreSQL:使用某种排序条件对元素数组进行排序

假设您需要numranges按左边界降序对数组进行排序。下面的做法是最简单的:将unnest数组放入表中,对表进行排序,然后array_agg将其放回到数组中。这在代码中看起来怎么样?这是我的非工作尝试:

DO $$
DECLARE
    x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN

    x := (
          WITH x AS (
              SELECT xrow FROM unnest(x) AS xrow
          )
          SELECT array_agg(xrow) FROM x ORDER BY lower(xrow) DESC
    );
    RAISE NOTICE '%', x;
END;
$$;
Run Code Online (Sandbox Code Playgroud)

arrays sorting postgresql sql-order-by aggregate-functions

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

Postgresql 获取一年中的所有月份和空值

我正在尝试在 PostgreSQL 中进行查询,它应该为我提供一年中的所有月份,按月排序。还有null销售列为空的月份的值。但是我无法显示所有月份,也null根本没有任何值。请帮忙?

这是我的查询:

SELECT
    to_char(date_trunc('Month', dateofmonth), 'Month') MON,
    sum(sales) SALES
FROM SALES_TABLE
GROUP BY MON;
Run Code Online (Sandbox Code Playgroud)

sql postgresql null

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