Ale*_*exC 9 postgresql postgresql-9.5
我正在尝试在 CASE 表达式上创建索引,如下所示
CREATE TABLE test(i INT, j INT);
CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j END);
Run Code Online (Sandbox Code Playgroud)
收到此错误:
ERROR: syntax error at or near "CASE"
LINE 1: CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j ...
^
********** Error **********
ERROR: syntax error at or near "CASE"
SQL state: 42601
Character: 40
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Postgres 9.5.2
ype*_*eᵀᴹ 19
您需要在CASE
表达式周围添加额外的括号:
CREATE UNIQUE INDEX test_index
ON test ((CASE WHEN i=1 THEN j END)) ;
Run Code Online (Sandbox Code Playgroud)
正如文档所述CREATE INDEX
:
索引的键字段指定为列名,或者指定为括号中的表达式。
还可以考虑使用过滤索引,这在功能上是等效的,但会使用更少的空间,因为它将j
仅存储具有i = 1
而不是(可能是数百万)或其余值的行的NULL
值:
CREATE UNIQUE INDEX test_index_2
ON test (j) WHERE i=1 ;
Run Code Online (Sandbox Code Playgroud)