All Products
Search
Document Center

Hologres:UPDATE

Last Updated:Mar 27, 2026

Gunakan pernyataan UPDATE untuk memodifikasi nilai kolom pada baris yang memenuhi kondisi tertentu.

Sintaks

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

Parameter

ParameterDeskripsi
tableNama tabel yang akan di-update.
aliasNama alternatif untuk tabel tersebut.
columnNama kolom yang akan di-update.
expressionEkspresi yang menghasilkan nilai baru untuk kolom tersebut.
from_listKolom dalam tabel sumber, digunakan saat melakukan update dengan data dari tabel lain.
conditionKondisi yang harus dipenuhi oleh baris agar diperbarui. Baris yang tidak sesuai dengan kondisi tersebut tidak akan berubah.

Untuk spesifikasi lengkap pernyataan UPDATE PostgreSQL, lihat UPDATE.

Cara kerja

Setiap tabel Hologres memiliki tiga file terkait: file data, file indeks kunci primer, dan file tag. File tag terutama digunakan dalam skenario di mana data akan dihapus atau diperbarui menggunakan pernyataan DELETE, UPDATE, INSERT ON CONFLICT, atau pernyataan serupa. Untuk informasi lebih lanjut tentang file indeks kunci primer, lihat PK.

Saat Anda menjalankan pernyataan UPDATE, Hologres pertama-tama menulis data baru ke tabel memori (Mem Table), lalu secara asinkron menyimpannya ke disk:

  • Tabel berorientasi baris: Data baru disimpan ke file baru. Data lama digabungkan (merged out) selama proses kompaksi latar belakang.

  • Tabel berorientasi kolom: Hologres membuat tabel tag di memori yang mencatat ID file dan ID baris dari data yang akan diganti. Data baru disimpan ke file baru, dan tabel tag disimpan ke file tag. Selama kompaksi, Hologres membersihkan data lama dan menggabungkan data baru.

Karena kompaksi bersifat asinkron, penggunaan penyimpanan meningkat selama operasi UPDATE berlangsung dan kembali normal setelah kompaksi selesai.

Efisiensi pembaruan pada tabel berorientasi baris lebih tinggi dibandingkan pada tabel berorientasi kolom.

Tabel dengan kunci primer

Jika sebuah tabel memiliki kunci primer, Hologres menggunakan file indeks kunci primer untuk mencari identifier baris (RID), lalu langsung menemukan file data target. Hal ini memungkinkan Hologres melewati file yang tidak relevan dan hanya memperbarui baris yang sesuai.

Tanpa kunci primer, Hologres harus melakukan pemindaian seluruh tabel untuk menemukan baris yang sesuai, yang berdampak negatif terhadap kinerja. Untuk informasi lebih lanjut, lihat PK.

Pembaruan parsial

Pembaruan parsial hanya memodifikasi sebagian kolom dalam suatu baris, sementara kolom lainnya tetap tidak berubah. Fitur ini merupakan kemampuan unik Hologres yang dapat memenuhi berbagai kebutuhan bisnis. Ketiga format penyimpanan mendukung pembaruan parsial, namun masing-masing menangani read-before-write secara berbeda:

Format penyimpananPerilaku pembaruan parsial
Berorientasi barisData ditulis dalam mode Append Only menggunakan struktur log-structured merge (LSM). Tidak memerlukan read-before-write.
Berorientasi kolomKolom kosong harus dibaca sebelum data baru ditulis, yang meningkatkan konsumsi resource.
Hibrida baris-kolomKolom kosong dibaca dari bagian berorientasi baris, sehingga mengurangi konsumsi resource dibandingkan tabel berorientasi kolom.

Dengan rencana tetap, peringkat kinerja pembaruan parsial dari yang tercepat hingga paling lambat adalah sebagai berikut:

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

Tanpa rencana tetap, pembaruan parsial berperilaku seperti operasi join antara dua tabel. Dalam kasus ini, peringkat performa menjadi berbeda:

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

Untuk sebagian besar beban kerja pembaruan real-time dengan fixed plan, tabel berorientasi baris memberikan kinerja terbaik. Lihat UPDATE statement untuk panduan mengaktifkan fixed plan.

Batasan

  • Kunci distribusi tidak dapat diperbarui. Untuk mengubah nilai kunci distribusi, hapus baris tersebut dan masukkan kembali dengan nilai baru.

  • Memperbarui tabel partisi akan memperbarui tabel anak, bukan tabel induk. Jalankan pernyataan UPDATE terhadap tabel anak spesifik yang berisi baris yang ingin Anda ubah.

  • Gunakan fixed plan untuk kinerja yang lebih baik. Tanpa fixed plan, pembaruan parsial diperlakukan sebagai penggabungan tabel, yang mengubah karakteristik serta peringkat kinerja antar format penyimpanan. Lihat UPDATE statement.

Contoh

Contoh berikut menggunakan tabel sampel:

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, '', '');

Perbarui kolom menggunakan ekspresi aritmetika

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

Perbarui beberapa kolom menggunakan kondisi pada kolom lain

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

Perbarui beberapa kolom tanpa kondisi WHERE (memperbarui semua baris)

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

Perbarui kolom menggunakan data dari tabel lain

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

UPDATE update_test SET b = tmp.a FROM tmp;

Pembaruan parsial: perbarui satu kolom dan biarkan kolom lain tidak berubah

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');

-- Perbarui hanya col2; col3 tidak berubah
UPDATE update_test2 SET col2 = 'tom' WHERE col1 = 'a1';

Hasil:

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

Pembaruan parsial yang sama juga dapat ditulis menggunakan INSERT ON CONFLICT:

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

FAQ

Mengapa penggunaan penyimpanan melonjak selama UPDATE lalu turun setelahnya?

FAQ

Selama operasi UPDATE, Hologres memberi tag pada data lama untuk dihapus dan segera menyimpan data baru ke file-file kecil. Data lama yang ditandai dan file baru tersebut berdampingan hingga proses kompaksi latar belakang dijalankan. Kompaksi menggabungkan data baru, membersihkan data lama, dan mengonsolidasi file-file kecil—pada titik ini, penggunaan penyimpanan kembali normal. Lihat Cara kerja untuk detailnya.