Я хочу реализовать здесь upsert. Значения в некоторых столбцах будут обновляться при каждой вставке.
Я использую -
insert into deployment.nodes values('sind','11', now(),'temp','not-active')
on conflict on constraint nodes_pkey
DO UPDATE SET latest=now(), agent='na', status='active';
Таблица - -
create table if not exists deployment.nodes (
account varchar(40),
hostname varchar(100),
latest timestamptz,
agent varchar(50),
status varchar(50),
primary key(account,hostname,agent)
);
После двух / трех вставок я получаю -
devops=# insert into deployment.nodes values('sind','11', now(),'temp','not-active') on conflict on constraint nodes_pkey DO UPDATE SET latest=now(), agent='ne', status='active';
INSERT 0 1
devops=# insert into deployment.nodes values('sind','11', now(),'temp','not-active') on conflict on constraint nodes_pkey DO UPDATE SET latest=now(), agent='ne', status='active';
INSERT 0 1
devops=# insert into deployment.nodes values('sind','11', now(),'temp','not-active') on conflict on constraint nodes_pkey DO UPDATE SET latest=now(), agent='ne', status='active';
INSERT 0 1
devops=# insert into deployment.nodes values('sind','11', now(),'temp','not-active') on conflict on constraint nodes_pkey DO UPDATE SET latest=now(), agent='ne', status='active';
ERROR: duplicate key value violates unique constraint "nodes_pkey"
DETAIL: Key (account, hostname, agent)=(sind, 11, ne) already exists.
Postgres Версия -
devops=# SHOW server_version;
server_version
----------------
10.11
Есть идеи, что происходит?