PostgreSQL 中的条件索引

Conditional index in PostgreSQL

我通过使用 Oracle 知道可以使用 CASE 语句进行条件索引。但是在 PostgreSQL 中有可能吗?例如索引如下:

CREATE INDEX IX_INDEXNAME ON SOME_TABLE (
     CASE 
        WHEN COLUMN1 = 0 AND COLUMN2 = 'value' THEN SOME1_ID
        ELSE SOME2_ID
     END);

这已经是针对 PostgreSQL 的修改版本,因为 Oracle case 语句与 Postgres 不同。如果这是可能的,我该怎么做?或者,如果这不可能,是否有其他实现方式?

您需要将 CASE 表达式括在括号中:

CREATE INDEX IX_INDEXNAME ON SOME_TABLE (
     (CASE 
        WHEN COLUMN1 = 0 AND COLUMN2 = 'value' THEN SOME1_ID
        ELSE SOME2_ID
     END) );