All Products
Search
Document Center

ApsaraDB RDS:Gunakan pgvector

Last Updated:Mar 28, 2026

pgvector menambahkan penyimpanan vektor dan pencarian kemiripan ke ApsaraDB RDS for PostgreSQL. Fitur ini memungkinkan Anda menyimpan embedding yang dihasilkan oleh model pembelajaran mesin serta menjalankan kueri berdasarkan jarak cosinus, Jarak Euclidean, atau inner product.

Cara kerja

Embedding adalah representasi numerik dari data—seperti teks, gambar, audio, atau video—yang dinyatakan sebagai vektor dalam ruang berdimensi tinggi. Objek yang secara semantik mirip dipetakan ke vektor yang berdekatan.

Sebagai contoh, jika Anda merepresentasikan apel sebagai [1, 1], pisang sebagai [1.2, 0.8], dan kucing sebagai [6, 0.4], pencarian vektor akan menempatkan pisang sebagai objek paling mirip dengan apel karena keduanya memiliki sifat yang sama sebagai buah.

image..png

pgvector mendukung:

  • Pencarian tetangga terdekat tepat (exact nearest neighbor) dan pencarian tetangga terdekat aproksimasi (approximate nearest neighbor/ANN)

  • Indeks Hierarchical Navigable Small World (HNSW) dan indeks paralel IVFFLAT untuk pencarian ANN yang cepat

  • Vektor hingga 16.000 dimensi; indeks pada vektor hingga 2.000 dimensi

  • Metriks jarak: Jarak Euclidean L2, kemiripan cosinus, dan inner product

  • Operasi tambahan: jarak L1, perkalian elemen per elemen, dan agregasi jumlah

Prasyarat

Sebelum memulai, pastikan bahwa:

  • Instans RDS Anda menjalankan PostgreSQL 14 atau versi lebih baru, dengan versi mesin minor 20230430 atau lebih baru. Untuk PostgreSQL 17, versi mesin minor harus 20241030 atau lebih baru.

  • Terdapat Akun istimewa untuk instans RDS tersebut.

Untuk melakukan peningkatan versi mesin utama, lihat Peningkatan versi mesin utama instans ApsaraDB RDS for PostgreSQL. Untuk memperbarui versi mesin minor, lihat Perbarui versi mesin minor instans ApsaraDB RDS for PostgreSQL. Untuk membuat akun istimewa, lihat Buat akun.

Instal ekstensi

Instal dari Konsol (disarankan)

  1. Buka halaman Instances. Di bilah navigasi atas, pilih Wilayah tempat instans RDS Anda berada. Klik ID instans tersebut.

  2. Di panel navigasi sebelah kiri, klik Plug-ins.

  3. Di tab Extension Marketplace, temukan ekstensi vector lalu klik Install. Atau, beralihlah ke tab Extension Management, cari ekstensi vector, lalu klik Install di kolom Actions.

    image

  4. Di kotak dialog, atur Database Name dan Database Account, lalu klik Install.

Ekstensi telah terinstal ketika status instans berubah dari Maintaining Instance menjadi Running.

Untuk memperbarui atau menguninstall ekstensi:

Di tab Extension Management, buka Installed Extensions, temukan ekstensi tersebut, lalu klik Upgrade Version atau Uninstall di kolom Actions.

Jika Upgrade Version tidak ditampilkan, berarti ekstensi tersebut sudah berada pada versi terbaru.

Instal dengan SQL

Penting

Operasi ini memerlukan Akun istimewa. Untuk membuatnya, lihat Buat akun.

-- Buat
CREATE EXTENSION IF NOT EXISTS vector;

-- Perbarui
ALTER EXTENSION vector UPDATE [ TO new_version ];

-- Hapus
DROP EXTENSION vector;
new_version adalah versi target ekstensi pgvector. Untuk riwayat versi dan fitur-fiturnya, lihat dokumentasi pgvector.

Simpan dan kueri vektor

Bagian ini menjelaskan cara menyimpan embedding dan menjalankan pencarian kemiripan. Untuk referensi API lengkap, lihat dokumentasi pgvector.

Buat tabel

CREATE TABLE items (
  id        bigserial PRIMARY KEY,
  item      text,
  embedding vector(2)
);
Contoh ini menggunakan vektor berdimensi 2 untuk ilustrasi. pgvector mendukung hingga 16.000 dimensi.

Masukkan vektor

INSERT INTO items (item, embedding)
VALUES
  ('Apple',  '[1,1]'),
  ('Banana', '[1.2,0.8]'),
  ('Cat',    '[6,0.4]');

Kueri berdasarkan kemiripan

Gunakan operator jarak untuk mengurutkan hasil berdasarkan tingkat kemiripan. Semakin pendek jaraknya, semakin mirip item-item tersebut.

Operator jarak:

OperatorMetric
<->Jarak L2 (Euclidean)
<=>Jarak cosinus
<#>Inner product

Kueri kemiripan dasar:

-- Temukan item yang paling mirip dengan Banana, diurutkan berdasarkan jarak cosinus
SELECT item,
       embedding <=> '[1.2, 0.8]' AS cosine_distance
FROM items
ORDER BY cosine_distance;

Contoh output:

  item  |    cosine_distance
--------+------------------------
 Banana |                      0
 Apple  | 0.019419362524530137
 Cat    | 0.13289443670962842
  • Jarak sebesar 0 berarti kecocokan tepat.

  • Jarak sebesar 0.019 menunjukkan kemiripan tinggi.

  • Jarak sebesar 0.133 menunjukkan kemiripan rendah.

Anda dapat menentukan ambang batas kemiripan berdasarkan kebutuhan bisnis Anda untuk mengecualikan hasil dengan tingkat kemiripan rendah.

Buat indeks

Tanpa indeks, pgvector melakukan pencarian tepat (exact search) pada seluruh tabel. Untuk set data besar, buat indeks vektor guna mempercepat pencarian ANN.

Buat indeks HNSW

CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);

Parameter:

ParameterDescription
mJumlah maksimum koneksi per node di setiap lapisan. Nilai yang lebih tinggi meningkatkan kerapatan graf, tingkat recall, serta waktu yang dibutuhkan untuk membuat dan mengkueri indeks.
ef_constructionUkuran set kandidat selama pembuatan indeks. Nilai yang lebih tinggi meningkatkan recall dengan biaya waktu yang lebih lama untuk membuat dan mengkueri indeks.

Metode akses (bidang `vector_cosine_ops`):

ValueDistance metric
vector_cosine_opsJarak cosinus
vector_l2_opsJarak L2 (Euclidean)
vector_ip_opsInner product

Buat indeks IVF

CREATE INDEX ON items USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);

Parameter:

ParameterDescription
listsJumlah daftar yang digunakan untuk mempartisi dataset. Lebih banyak daftar berarti pencarian lebih cepat, tetapi dapat mengurangi recall. Jika lists > 2000, Anda mungkin melihat pesan ERROR: memory required is xxx MB, maintenance_work_mem is xxx MB — tingkatkan nilai maintenance_work_mem untuk mengatasinya. Lihat Atur parameter instans.
ivfflat.probesJumlah daftar yang dipindai selama kueri. Lebih banyak probes meningkatkan recall tetapi memperlambat pencarian.

Atur ivfflat.probes pada level session atau transaksi:

-- Level session
SET ivfflat.probes = 10;

-- Level transaksi
BEGIN;
SET LOCAL ivfflat.probes = 10;
SELECT ...;
COMMIT;
Penting

Jika ivfflat.probes sama dengan nilai lists yang digunakan saat pembuatan indeks, maka indeks tersebut diabaikan dan sistem akan menjalankan pemindaian tabel penuh (full table scan). Hal ini dapat menurunkan performa pencarian secara signifikan.

Sesuaikan nilai ivfflat.probes bersamaan dengan lists berdasarkan dataset dan kebutuhan recall Anda.

Data performa

Untuk data benchmark indeks HNSW dan IVF, lihat:

Langkah selanjutnya

Bangun aplikasi AI produksi berbasis pgvector: