postgresql 'SELECT DISTINCT' 查询是确定性的吗?



PostgresSELECT DISTINCT查询是确定性的吗?

如果表(和整个数据库(保持不变,SELECT DISTINCT somecolumn FROM sometable会返回相同的结果(包括顺序(吗?

在"选择查询文档"的"说明"部分中指出:

如果指定了 ORDER BY 子句,则返回的行将按指定的顺序排序。如果未给出 ORDER BY,则按系统认为生成最快的任何顺序返回行。

DISTINCT ON条款部分,他们补充说:

请注意,每个集合的"第一行"是不可预测的,除非使用 ORDER BY 来确保所需的行首先出现。

通常,当数据库未更改时,这仍然适用吗?

这个答案假设select中的表达式是确定性的。 否则,这个问题似乎微不足道。

未指定顺序,因此它可能会在查询运行之间更改,也可以在不同的系统上更改。 但是,结果集应相同。

您在文档中的第二个报价是针对distinct on的。 这不是确定性的,除非您使用的是稳定排序。

注意:如果使用不区分大小写的排序规则,则可能会获得不确定的结果。 内置排序规则区分大小写;不区分大小写意味着原始表达式不是确定性的。