У меня есть эта таблица:
CREATE TABLE myTable (
a VARCHAR(32),
b VARCHAR(32) DEFAULT NULL,
c VARCHAR(32) DEFAULT NULL,
PRIMARY KEY (a)
);
и запрос типа "UPSERT":
INSERT INTO
myTable ( a, b, c)
VALUES ($1, $2, $3)
ON CONFLICT (a)
DO UPDATE SET
b = $2,
c = $3,
RETURNING
a, b, c
;
Это работает, как и ожидалось. Если я сначала вставлю (json для удобства записи):
{a:"a", b:"b", c:"c"}
, тогда я смогу обновить его с помощью таких параметров:
{a:"a", b:"x", c:"y"}
И я получу ожидаемый результат - Запись {a: "a"} обновила столбцы b
и c
.
Но я также хотел бы сделать это:
{a:"a", c:"Q"}
и обновить c
столбец , оставляя столбец b
нетронутым.
Конечно, мне нужно какое-то выражение с правой стороны, но я не знаю что это такое Моя интуиция выглядит примерно так (SQL псевдокод):
...
DO UPDATE SET
b = ($2 | b)
c = ($3 | c)
...
Какой здесь правильный синтаксис? Или я должен использовать совершенно другой метод?