PostgreSQL如何使用按位运算符| =

时间:2011-10-28 11:14:02

标签: postgresql bitwise-operators

我想在PostgreSQL db上执行以下更新查询,但它不起作用并且出现语法错误。

查询如下

update wl_user set role_bitmask= role_bitmask|=1 where email='faisal@gmail.com'

问题似乎出现在|=运算符中,是否有人知道如何在PostgreSQL中使用| =运算符?

以下是错误。

[Err] ERROR:  operator does not exist: integer |= integer
LINE 1: ...pdate wl_user set role_bitmask=role_bitmask|=1 where ...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

1 个答案:

答案 0 :(得分:2)

您必须使用role_bitmask= role_bitmask|=1而不是role_bitmask=role_bitmask|1,如果您认为|=做了什么以及|做了什么,那么这也是有道理的。

澄清一下:PostgreSQL有很多运算符,允许您定义新的运算符。但在你的情况下,这无关紧要有两个原因:

  • UPDATE的手册说明了语法(缩写):UPDATE ... table ... SET column = { expression | DEFAULT }。这意味着,=是强制性的,而不是任何正常运算符。因此,没有|=也没有&=
  • 在所有那些可扩展的运算符中,没有赋值运算符。对每种情况都以特殊方式处理分配。查看this question的一些提示。

关于你的问题:像role_bitmask= role_bitmask|=1这样的表达会使每种语言的眉毛都升起: - )

摘要:您必须使用长格式... SET column = colum | bitmask