Database 如何在一个查询中切换postgres中的布尔值

Database 如何在一个查询中切换postgres中的布尔值,database,postgresql,boolean,Database,Postgresql,Boolean,我正在尝试更新postgres表中的一行。我想切换一个布尔字段 我想知道是否有一个查询来更新字段,而不是首先检查值是什么并用相反的值更新字段 我找到了MySQL的解决方案,但它不适用于postgres: UPDATE table SET boolean_field = !boolean_field WHERE id = :id Error: Operator does not exist. ! boolean postgres中有类似的语法吗?使用: 当旧值等于FALSE时,它将变为TR

我正在尝试更新postgres表中的一行。我想切换一个布尔字段

我想知道是否有一个查询来更新字段,而不是首先检查值是什么并用相反的值更新字段

我找到了MySQL的解决方案,但它不适用于postgres:

 UPDATE table SET boolean_field = !boolean_field WHERE id = :id

 Error: Operator does not exist. ! boolean
postgres中有类似的语法吗?

使用:

当旧值等于FALSE时,它将变为TRUE,反之亦然。空字段不会翻转,没有可翻转的对象

完整示例:

CREATE TABLE test(id serial, boolean_field boolean);

INSERT INTO test(boolean_field) 
VALUES(null),(false), (true) 
RETURNING *;
然后运行测试:

UPDATE test
SET boolean_field = NOT boolean_field 
RETURNING *;

如果布尔值不可为空(也不应该为空),那就太好了,但是如果它是空的,我们需要用false填充这些VAL呢?这不需要铸造就可以吗?
UPDATE test
SET boolean_field = NOT boolean_field 
RETURNING *;
UPDATE table_name 
  SET bool_col = NOT(COALESCE(bool_col, FALSE)) 
WHERE ...