数据库 table 可以在列的函数上建立索引吗?

Can a database table be indexed on a function of a column?

数据库索引可以位于列的 函数 上,还是必须精确地位于列本身中没有任何 change/adjustment/calculation 的内容上?

简单示例:

如果 transactions table 包含指定交易日期时间的列(例如 2020-12-13 12:58:59),如果我们只想在日期上建立索引(例如 2020-12-13) 的事务,是否需要创建另一列(仅包含日期),或者可以在日期时间列的函数上创建索引?

实际上是 Postgres supports function indices。例如,我们可以定义:

CREATE INDEX idx ON transactions (cast(ts_col AS date));

是的,可以。它甚至可以是任何表达式,包括函数调用,并使用多于一列的 table.

来自 CREATE INDEX 的文档:

CREATE ... INDEX ... ON ... table_name ...
    ( { ... ( expression ) } ... ) ...

...

expression

An expression based on one or more columns of the table. The expression usually must be written with surrounding parentheses, as shown in the syntax. However, the parentheses can be omitted if the expression has the form of a function call.