PostgreSQL як використовувати побічний оператор | =

Я хочу виконати наступний запит на оновлення в PostgreSQL db, але він не працює і дає синтаксичну помилку.

Запит наступним чином

update wl_user set role_bitmask= role_bitmask|=1 where email='[email protected]'

Як видається, проблема складається з оператора | = , чи ні хтось має уявлення про використання | = оператора в PostgreSQL?

Нижче наведено помилку.

 [Err] ПОМИЛКА: оператора не існує: ціле число | = ціле число
LINE 1: ... pdate wl_user set role_bitmask = role_bitmask | = 1 де ...
                                                             ^
ПОРАДА: жоден оператор не відповідає даному імені та аргументу типу (ів). Вам, можливо, доведеться додати явні виклики типу.
 
0

1 Відповіді

Замість role_bitmask = role_bitmask | = 1 ви повинні використовувати role_bitmask = role_bitmask | 1 , що також має сенс, якщо ви думаєте, що робить | = і що робить | .

Для уточнення: PostgreSQL має багато операторів і дозволяє визначати нові оператори. Але у вашому випадку це не має значення з двох причин:

  • The manual for UPDATE says about the syntax (abbreviated): UPDATE ... table ... SET column = { expression | DEFAULT }. This means, that the = is mandatory and not any of the normal operators. Therefore there is no |= and no &= .
  • Among all those extensible operators there is no assignment operator. Assignment is handled in a special way for each case. Have a look at this question for some hints.

Що стосується вашого питання: вираз, подібний до role_bitmask = role_bitmask | = 1 , робить брови підвищеними в кожній мові :-)

Summary: You have to use the long form ... SET column = colum | bitmask.

2
додано