小编Jim*_*Bob的帖子

PostgreSQL 可以在每个查询中使用多个部分索引吗?

我已经读到 PostgreSQL 通常可以使用多个索引,但是在跨两个索引的查询的特定情况下,它会同时使用两个索引吗?如果是这样,它们是按顺序加载还是一起加载?

例如,如果此查询跨越两个部分索引 by column_1,将如何使用部分索引,以及如何加载和丢弃索引数据:

SELECT 1 FROM sample_table WHERE column_1 > 50 AND column_2 < 50000
Run Code Online (Sandbox Code Playgroud)

postgresql performance index-tuning postgresql-performance

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

在不确定性下管理 CTE 执行顺序

出于性能原因,我正在编写一个大型的多步 CTE 。

在一个查询中,数据必须从一个表移动到另一个表,但移动的行数是不确定的,可能为零。

在后续表中,删除来自前一个查询的源,但必须在完成前一个查询之后。

最后,在上面的第二个查询完成后,必须写入行来代替已删除的行。

在前两个查询中,我使用 RETURNING 来强制执行顺序。

在第二个查询中,我确定第一个查询是由这个子查询完成的

(SELECT COUNT(*) FROM first_query) >= 0
Run Code Online (Sandbox Code Playgroud)

在第三个查询中,我确定第二个查询是由这个子查询完成的

SELECT EXISTS (SELECT 1 FROM second_query)
Run Code Online (Sandbox Code Playgroud)

确定第一个查询已完成的子查询是否正确?

用于确定必须返回行的第二个查询已完成最佳准确性、精度和性能的子查询?

使用上述子查询来强制执行顺序会导致重复的键值违规。

查询小节

WITH copy_to_other_table AS (
    INSERT INTO other_table (column_a, column_b) 
        SELECT column_a, column_b 
            FROM main_table
        WHERE column_a = $1::bigint
        RETURNING *
),
main_table_deleted AS (
    DELETE FROM main_table WHERE column_a = $1::bigint 
        AND (SELECT COUNT(*) FROM copy_to_other_table) >= 0         
        RETURNING *
)
INSERT INTO main_table (column_a, column_b) 
        SELECT column_a, column_b 
            FROM another_table …
Run Code Online (Sandbox Code Playgroud)

postgresql cte unique-constraint

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

CTE 是多线程的吗?

这里这里似乎表明它们是,但我也被告知(源无法定位)多行单语句插入只会使用一个线程进行所有写入,要多线程化,查询应该被分解并发送到与核心数量一样多的连接。

文件指出,热膨胀系数执行“同时”,但没有效果,用来“热膨胀系数将使用所有可用内核来处理任何并行子报表和/或主查询”链接说明确。

CTE 是否总是将所有可用内核用于任何并行任务?如果是这样,除了可以合理地假设与 链接之外,还有什么警告RETURNING吗?

postgresql cte parallelism

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

READ COMMITTED 是否总是在序列化失败后重新开始而 SERIALIZABLE 只是失败?

PostgreSQL Concurrency With MVCC 页面上,它说:

知道你在想什么:同时更新同一行的两个事务怎么样?这就是事务隔离级别的用武之地。Postgres 基本上支持两种模型,允许您控制如何处理这种情况。默认值 READ COMMITTED 在初始事务完成后读取行,然后执行语句。如果行在等待时发生更改,它基本上会重新开始。例如,如果您使用 WHERE 子句发出 UPDATE,则 WHERE 子句将在初始事务提交后重新运行,如果仍然满足 WHERE 子句,则执行 UPDATE。

文件似乎表明,提交读仍然受到故障,应予以重审。

可以将 READ COMMITTED 设置为以与 SERIAZLIZABLE 相同的原子性无限期重试吗?

postgresql performance version-control serialization postgresql-performance

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