我提出这样的问题
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 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 …
我的表有以下格式的一堆列:
_settingA
_settingB
_settingB
Run Code Online (Sandbox Code Playgroud)
我想重命名它们只是添加一个前缀,如下所示:
_1_settingA
_1_settingB
_1_settingC
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最快捷/最有效的方法是什么?
编辑:我要补充一点,我有很多超过三列以这种方式重新命名.如果我只有三个,我会一个接一个地手动完成.并感谢你无论你是谁.
我有以下表结构
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
我的数据库中的一张表必须每天更新。Web 服务器每 5 秒主动查询此表。现在,UPDATE由于某些限制,我不能简单地处理表格行,因此我需要清除所有行并重新填充表格。如何在不影响 Web 服务器功能的情况下安全地执行此操作?重新填充由与 Web 服务器隔离的其他 Web 服务完成。我正在使用 Spring 框架。
桌子上有大约。170k 行和 5 列。
假设您需要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) 我正在尝试在 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) postgresql ×7
sql ×4
aggregate ×1
arrays ×1
automation ×1
ddl ×1
indexing ×1
internals ×1
null ×1
sorting ×1
spring ×1
sql-order-by ×1
sql-update ×1