PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como fazer upsert corretamente no postgres 9.5


O ON CONFLICT construção requer um UNIQUE constrangimento para trabalhar. Na documentação em INSERT .. ON CONFLICT cláusula :

Agora, a pergunta não é muito clara, mas você provavelmente precisa de um UNIQUE restrição nas 2 colunas combinadas:(category_id, gallery_id) .
ALTER TABLE category_gallery
    ADD CONSTRAINT category_gallery_uq
    UNIQUE (category_id, gallery_id) ;

Se a linha a ser inserida corresponder a ambos valores com uma linha já na tabela, em vez de INSERT , faça um UPDATE :
INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id, gallery_id)
  DO UPDATE SET
    last_modified_date = EXCLUDED.create_date,
    last_modified_by_user_id = EXCLUDED.create_by_user_id ;

Você pode usar as colunas da restrição UNIQUE:
  ON CONFLICT (category_id, gallery_id) 

ou o nome da restrição:
  ON CONFLICT ON CONSTRAINT category_gallery_uq