我只是在这里阅读Postgres中部分索引的文档。最后一个代码段:
CREATE UNIQUE INDEX tests_target_one_null ON tests ((target IS NULL)) WHERE target IS NULL;
包含一些我不熟悉的语法。特别是这(target IS NULL)
部分。括号在这里做什么?通常,部分索引创建命令的语法如下:
CREATE UNIQUE INDEX <index_name> ON <table_name>(<column_name>) WHERE <boolean_expression>;
注意:我认为这是通常的语法,但是我试图从这些文档中学习,并且它们正在通过示例进行解释,因此在这里我可能会遗漏一些细微之处。
无论如何,如果是这种情况,那么似乎可以(target IS NULL)
定义一个列。( . )
运算符是否定义一个匿名函数,在此将其解释为列?
我对SQL很陌生,这对Google来说很难。非常感谢。
在PostgreSQL中创建索引时,每个部分可以是一列或一个表达式。但是,它们的键入方式不同:
要包括一列,只需输入其名称,如中所示col1
。
要在括号之间添加表达式类型,如中所示(-col3 * 123)
。
例如,以下索引在PostgreSQL中有效:
(col1, col2, col3)
-三列
(col1, (-col2), col3)
-两列和一个表达式。
(col1, (col2 + col3))
-一栏和一个表达式。
您提到的情况target IS NULL
是一个表达式,因此必须在括号中键入,例如:
create index idx1 on my_table ((target IS NULL));
至于“部分索引”语法,那是正确的。您WHERE <predicate>
在末尾添加多余的部分。这告诉PostgreSQL索引中仅包含与该谓词匹配的行。其余的将不会填充索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句