Todos os produtos
Search
Central de documentação

Hologres:UPDATE

Última atualização: Jun 28, 2026

Use a instrução UPDATE para modificar valores de colunas em linhas que correspondam a uma condição especificada.

Sintaxe

UPDATE <table> [ * ] [ [ AS ] <alias> ]
    SET { <column> = { <expression> } |
          ( <column> [, ...] ) = ( { <expression> } [, ...] ) } [, ...]
    [ FROM <from_list> ]
    [ WHERE <condition> ]

Parâmetros

Parâmetro

Descrição

table

Nome da tabela a atualizar.

alias

Nome alternativo para a tabela.

column

Nome da coluna a atualizar.

expression

Expressão que gera o novo valor da coluna.

from_list

Coluna na tabela source, usada ao atualizar com dados de outra tabela.

condition

Condição que as linhas devem atender para atualização. Linhas fora da condição permanecem inalteradas.

Para a especificação completa do UPDATE no PostgreSQL, consulte UPDATE.

Funcionamento

Cada tabela do Hologres tem três arquivos associados: um arquivo de dados, um arquivo de índice de chave primária e um arquivo de tag. Os arquivos de tag servem principalmente para cenários de exclusão ou atualização de dados via DELETE, UPDATE, INSERT ON CONFLICT ou outras instruções. Para mais informações sobre o arquivo de índice de chave primária, consulte PK.

Ao executar o UPDATE, o Hologres grava os novos dados na tabela de memória (Mem Table) e depois os libera assincronamente para o disco:

  • Tabelas orientadas a linhas: O sistema libera os novos dados para um novo arquivo e remove os dados antigos durante a compactação em segundo plano.

  • Tabelas orientadas a colunas: O Hologres cria uma tabela de tags na memória para registrar o ID do arquivo e o ID da linha dos dados a substituir. Os novos dados vão para um novo arquivo, enquanto a tabela de tags é liberada para um arquivo de tag. Durante a compactação, o sistema limpa os dados antigos e mescla os novos.

Como a compactação é assíncrona, o uso de armazenamento aumenta durante a execução do UPDATE e normaliza após a conclusão da compactação.

A eficiência de atualização em tabelas orientadas a linhas supera a das tabelas orientadas a colunas.

Tabelas com chave primária

Se a tabela tiver chave primária, o Hologres usa o arquivo de índice dessa chave para localizar o identificador de linha (RID) e acessar diretamente os arquivos de dados alvo. Isso permite ignorar arquivos não relacionados e atualizar apenas as linhas correspondentes.

Sem chave primária, o Hologres precisa varrer toda a tabela para encontrar as linhas correspondentes, o que impacta o desempenho. Para mais informações, consulte PK.

Atualizações parciais

Uma atualização parcial modifica apenas um subconjunto de colunas em uma linha e mantém as demais inalteradas. Esse recurso exclusivo do Hologres atende a diversos requisitos de negócios. Todos os três formatos de armazenamento suportam atualizações parciais, mas lidam com a leitura prévia à escrita de maneiras diferentes:

Formato de armazenamento

Comportamento da atualização parcial

Orientado a linhas

Grava dados no modo Append Only usando a estrutura LSM (log-structured merge). Não requer leitura prévia à escrita.

Orientado a colunas

Requer leitura das colunas vazias antes de gravar os novos dados, o que aumenta o consumo de recursos.

Híbrido (linha-coluna)

Lê as colunas vazias da parte orientada a linhas, reduzindo o consumo de recursos em comparação às tabelas orientadas a colunas.

Com fixed plans, o desempenho da atualização parcial segue esta ordem (do mais rápido para o mais lento):

row-oriented > row-column hybrid > column-oriented

Sem fixed plans, as atualizações parciais funcionam como uma junção entre duas tabelas. Nesse caso, a classificação de desempenho muda:

column-oriented > row-column hybrid > row-oriented

Para a maioria das cargas de trabalho de atualização em tempo real com fixed plans, as tabelas orientadas a linhas oferecem o melhor desempenho. Consulte Instrução UPDATE para obter orientações sobre como habilitar fixed plans.

Limitações

  • Chaves de distribuição não podem ser atualizadas. Para alterar o valor de uma chave de distribuição, exclua a linha e insira-a novamente com o novo valor.

  • Atualizar uma tabela particionada afeta as tabelas filhas, não a tabela pai. Execute o UPDATE diretamente na tabela filha específica que contém as linhas a modificar.

  • Use fixed plans para obter melhor desempenho. Sem eles, as atualizações parciais são tratadas como junções de tabelas, alterando tanto as características quanto a classificação de desempenho entre os formatos de armazenamento. Consulte Instrução UPDATE.

Exemplos

Os exemplos abaixo usam uma tabela de amostra:

CREATE TABLE update_test (
  a text primary key,
  b int not null,
  c text not null,
  d text
);

INSERT INTO update_test VALUES ('b1', 10, '', '');

Atualize uma coluna usando uma expressão aritmética

UPDATE update_test SET b = b + 10 WHERE a = 'b1';

Atualize várias colunas usando uma condição em outra coluna

UPDATE update_test SET c = 'new_' || a, d = null WHERE b = 20;

Atualize várias colunas sem uma condição WHERE (atualiza todas as linhas)

UPDATE update_test SET (b, c, d) = (1, 'test_c', 'test_d');

Atualize uma coluna usando dados de outra tabela

CREATE TABLE tmp (a int);
INSERT INTO tmp VALUES (2);

UPDATE update_test SET b = tmp.a FROM tmp;

Atualização parcial: modifique uma coluna e mantenha as outras inalteradas

CREATE TABLE update_test2 (
  col1 text NOT NULL PRIMARY KEY,
  col2 text,
  col3 text
);

INSERT INTO update_test2 VALUES ('a1', 'a2', 'a3'), ('a11', 'a22', 'a33');

-- Update col2 only; col3 is unchanged
UPDATE update_test2 SET col2 = 'tom' WHERE col1 = 'a1';

Resultado:

 col1 | col2 | col3
------+------+------
 a1   | tom  | a3
 a11  | a22  | a33
(2 rows)

Também é possível escrever a mesma atualização parcial usando INSERT ON CONFLICT:

INSERT INTO update_test2 (col1, col2) VALUES ('a1', 'tom')
ON CONFLICT (col1) DO UPDATE
SET col2 = EXCLUDED.col2;

Perguntas frequentes

Por que o uso de armazenamento aumenta durante um UPDATE e diminui logo depois?

FAQ

Durante um UPDATE, o Hologres marca os dados antigos para exclusão e libera imediatamente os novos dados em pequenos arquivos. Os dados antigos marcados e os novos arquivos coexistem até a execução da compactação em segundo plano. A compactação mescla os novos dados, limpa os antigos e consolida os pequenos arquivos, normalizando o uso de armazenamento. Consulte Funcionamento para mais detalhes.