PostgreSQL

PostgreSQL Upsert em conflito

PostgreSQL Upsert em conflito
A expressão 'Upsert' é reconhecida como uma fusão no RDBMS. Um 'Upsert' é útil ter com o PostgreSQL se você não quiser lidar com erros de violação de restrição únicos devido a entradas repetidas. Quando você executa um comando UPDATE genérico, os ajustes necessários só ocorrerão se um registro se enquadrar nos padrões de comando; se esses dados não existirem, nada acontecerá. Quando você adiciona uma nova linha a uma tabela, o PostgreSQL irá atualizar a linha se ela já existia, ou então irá incorporar a nova linha se a linha não existisse. A palavra-chave 'Upsert' SQL combina as palavras “atualizar” e “inserir.”Este artigo mostra como o recurso 'Upsert' do PostgreSQL funciona, bem como como usar o recurso 'Upsert' para adicionar ou atualizar informações se a linha inserida já existir na tabela.

Sintaxe

A seguir está a sintaxe da consulta 'Upsert' ON CONFLICT.

>> INSERT INTO nome_tabela (lista_coluna) VALUSE (lista_valor) ON CONFLICT ação de destino;

Inicie o PostgreSQL Command-Line Shell

Para começar, inicie o shell de linha de comando PostgreSQL no menu do aplicativo. Conecte-o ao servidor necessário. Insira o nome do banco de dados com o qual deseja trabalhar. Para trabalhar em outra porta, digite o número da porta e o nome de usuário com o qual deseja trabalhar. Para continuar com os parâmetros padrão, deixe os espaços como estão e pressione 'Enter' em todas as opções. Adicione uma senha para o nome de usuário selecionado, e seu shell de comando deve estar pronto para uso.

Exemplo 1:

Agora, podemos começar com 'Upsert' em conflito. Suponha que você tenha uma tabela intitulada 'pessoa' em um banco de dados selecionado com alguns campos que mostram registros de pessoas diferentes. Esses registros mostram os nomes das pessoas, suas idades e suas cidades e países. A tabela é exibida abaixo.

>> SELECIONE * DA pessoa;

É importante saber como um erro ou conflito pode surgir. O campo da tabela 'id', que também é uma chave primária, contém valores de 1 a 15. Quando o usuário tenta inserir alguns registros duplicados na tabela, ocorre o conflito.

Vamos tentar a seguinte instrução INSERT, inserindo os registros na tabela 'pessoa'. Esta consulta irá causar um erro porque o valor '3' do campo 'id' já existe na tabela.

>> INSERIR NA pessoa (id, nome, idade, cidade, país) VALORES ('3', 'Habib', '45', 'Chakwal', 'Paquistão');

Exemplo 2: Upsert com cláusula ON CONFLICT

Usaremos a cláusula ON CONFLICT para evitar a consulta INSERT que está causando este erro devido à inserção de registros duplicados. O comando ON CONFLICT vem com duas frases com usos diferentes.

Exemplo 3: Upsert com cláusula DO NOTHING

Neste exemplo, veremos a cláusula DO NOTHING. Esta cláusula elabora que nenhuma operação será realizada em caso de erro ou conflito. Em outras palavras, esta cláusula só evitará conflito ou erro.

Então, vamos tentar o mesmo comando INSERT que usamos anteriormente para adicionar registros duplicados à tabela 'pessoa', com algumas alterações anexadas. Adicionamos a cláusula ON CONFLICT, juntamente com a instrução DO NOTHING nesta cláusula. A cláusula ON CONFLICT foi aplicada à coluna 'id' exclusiva. Isso significa que, quando o usuário tentar inserir o valor duplicado na coluna 'id', ele evitará o conflito e não fará nada. Como você pode ver na imagem abaixo, não vai nem inserir o novo registro na tabela, nem vai atualizar o registro anterior.

>> INSERIR NA pessoa (id, nome, idade, cidade, país) VALORES ('3', 'Habib', '45', 'Chakwal', 'Paquistão') SOBRE O CONFLITO (id) NÃO FAÇA NADA;

Vamos verificar a tabela "pessoa" novamente para fins de autenticidade. Como você pode ver na imagem abaixo, nenhuma alteração foi feita na tabela.

>> SELECIONE * DA pessoa;

Exemplo 2: Upsert com cláusula DO

A seguir, veremos as cláusulas ON CONFLICT e DO. Como seu nome indica, a cláusula ___ executará uma ação em caso de erro ou conflito quando um valor duplicado for inserido em uma tabela. Usaremos o mesmo comando de inserção que usamos anteriormente para inserir um registro duplicado na tabela 'pessoa', com uma pequena alteração. Adicionamos a cláusula ON CONFLICT com a cláusula DO dentro dela. Quando o usuário tenta inserir o valor não único na coluna 'id', ele executa uma ação para evitar o conflito. Temos usado a cláusula UPDATE após a cláusula DO, que indica uma atualização dos dados na tabela 'pessoa'. A palavra-chave SET é usada para definir o valor da coluna 'nome' para o novo valor, 'Habib,' usando a palavra-chave EXCLUDED onde o 'id' é '3' no momento atual. Se você executar a seguinte consulta, verá que a consulta foi realizada.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.nome;

Os registros da tabela 'pessoa' devem ser buscados para ver as mudanças na consulta acima. Se você executar a seguinte consulta no shell da linha de comando, deverá ver a saída subsequente.

>> SELECIONE * DA pessoa;

Como você pode ver na saída abaixo, o nome da pessoa foi atualizado para 'Habib', onde o 'id' é '3.'

Você também pode atualizar os registros em mais de uma coluna usando a palavra-chave EXCLUDED na cláusula ON CONFLICT da consulta INSERT, conforme mostrado abaixo.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.nome, cidade = EXCLUÍDO.cidade;

As mudanças são mostradas abaixo.

>> SELECIONE * DA pessoa;

Conclusão

Este artigo mostrou como usar PostgreSQL 'Upsert' com a cláusula ON CONFLICT, junto com as ações DO e DO NOTHING. Depois de ler este artigo, esperamos que seja mais fácil entender como usar o PostgreSQL 'Upsert.'

Remapeie os botões do mouse de maneira diferente para software diferente com o controle de botão do mouse X
Talvez você precise de uma ferramenta que possa fazer o controle do seu mouse mudar com cada aplicativo que você usa. Se for esse o caso, você pode ex...
Análise do mouse sem fio Microsoft Sculpt Touch
Recentemente li sobre o Microsoft Sculpt Touch mouse sem fio e decidi comprá-lo. Depois de usá-lo por um tempo, decidi compartilhar minha experiência ...
AppyMouse na tela Trackpad e ponteiro do mouse para tablets Windows
Os usuários de tablets costumam perder o ponteiro do mouse, especialmente quando costumam usar laptops. Os smartphones e tablets touchscreen vêm com m...