Upsert
No PostgreSQL, o termo “upsert” se refere a uma operação que atualiza uma linha se ela já existe com base em uma chave única, e insere a linha se ela não existe. No PostgreSQL, você pode realizar operações de upsert usando a cláusula ON CONFLICT
.
Aqui está a sintaxe básica para realizar um upsert no PostgreSQL:
INSERT INTO nome_da_tabela (coluna1, coluna2, /* outras colunas */)
VALUES (valor1, valor2, /* outros valores */)
ON CONFLICT (chave_unica)
DO UPDATE SET coluna1 = EXCLUDED.coluna1, coluna2 = EXCLUDED.coluna2, /* outras colunas = EXCLUDED.outras_colunas */;
Nesta consulta:
nome_da_tabela
: é o nome da tabela na qual você deseja realizar o upsert.coluna1, coluna2, /* outras colunas */
: são os nomes das colunas na tabela.valor1, valor2, /* outros valores */
: são os valores que você deseja inserir na tabela.chave_unica
: é a ou as colunas que formam a chave única na tabela.EXCLUDED
: é uma palavra-chave especial do PostgreSQL que se refere à linha sendo inserida ou atualizada.
Por exemplo, suponha que você tenha uma tabela chamada clientes
com uma chave primária chamada id
e colunas nome
e email
. Se você quiser inserir um novo cliente ou atualizar o registro se o cliente já existir com base no endereço de e-mail, você pode fazer o seguinte:
INSERT INTO clientes (nome, email)
VALUES ('João', 'joao@example.com')
ON CONFLICT (email)
DO UPDATE SET nome = EXCLUDED.nome;
Neste exemplo, se um cliente com o e-mail 'joao@example.com'
já existir na tabela clientes
, o nome desse cliente será atualizado para 'João'
. Se não existir, um novo cliente será inserido com o nome 'João'
e o e-mail 'joao@example.com'
.
Por favor, note que esta funcionalidade está disponível a partir do PostgreSQL 9.5 e versões posteriores.