ON CONFLICT e RETURNING
Insira uma linha ou atualize a existente (upsert), e receba de volta as linhas que mudaram.
Sintaxe
INSERT INTO table VALUES (…) ON CONFLICT (key) DO UPDATE SET column = EXCLUDED.column;INSERT … ON CONFLICT DO NOTHING;UPDATE … RETURNING column_list;
- EXCLUDED guarda a linha que você tentou inserir.
- Em outros bancos de dados: MySQL ON DUPLICATE KEY UPDATE, MERGE no SQL Server e no Oracle.
Exemplo
SELECT product_id, name FROM products WHERE product_id = 3;
O produto 3 já existe, então um upsert com a chave 3 o atualizaria em vez de falhar.
Tabelas usadas: products. Experimente em uma lição abaixo.
Erros comuns
- ON CONFLICT precisa de uma restrição UNIQUE ou de uma chave primária nas colunas que você indicar.
- RETURNING é do PostgreSQL (e também do SQLite e do MariaDB); o SQL Server usa OUTPUT.