All Products
Search
Document Center

Simple Log Service:Koneksi ke SLS menggunakan protokol PostgreSQL

Last Updated:Mar 18, 2026

Simple Log Service (SLS) kompatibel dengan protokol PostgreSQL dan mendukung koneksi melalui driver JDBC standar. Anda dapat menggunakan client psql, driver JDBC, atau alat lain yang mendukung protokol PostgreSQL untuk terhubung ke SLS serta mengeksekusi pernyataan SQL guna membaca, menulis, dan mengelola data.

Fitur

Saat terhubung ke SLS menggunakan protokol PostgreSQL, Anda dapat:

  • Mengelola logstore menggunakan sintaks SQL standar (buat, ubah, hapus).

  • Menganalisis data log menggunakan sintaks SQL PostgreSQL.

  • Menulis data log menggunakan pernyataan INSERT.

  • Menanyakan metadata skema logstore secara mulus menggunakan sintaks PostgreSQL native, memastikan kompatibilitas penuh dengan tabel sistem PostgreSQL.

Batasan

Batasan berikut berlaku saat Anda terhubung ke SLS menggunakan protokol PostgreSQL:

Batasan

Deskripsi

Prepared Statement

Eksekusi prepared statement (parse/bind/execute dalam protokol PG) tidak didukung. Jika Anda menggunakan JDBC, atur eksplisit mode kueri PG ke simple. Misalnya, atur properti koneksi berikut:

props.setProperty(PGProperty.PREFER_QUERY_MODE.getName(), "simple");

Atau atur parameter preferQueryMode dalam URL JDBC:

jdbc:postgresql://{endpoint}:5432/{project}?preferQueryMode=simple

Dukungan transaksi

Pernyataan begin, commit, dan rollback diabaikan dan tidak berpengaruh.

Primary key dan nilai default

Kendala seperti primary key dan nilai default tidak didukung.

Prasyarat

  • Anda telah membuat project.

  • Anda telah memperoleh ID AccessKey dan Rahasia AccessKey. Untuk informasi selengkapnya, lihat Buat AccessKey.

  • Anda telah menginstal alat client PostgreSQL (seperti psql) atau alat lain yang mendukung protokol PostgreSQL.

Koneksi ke SLS

Untuk terhubung ke SLS menggunakan client PostgreSQL, gunakan format URL berikut:

postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}
# Koneksi mengaktifkan TLS secara default (MD5 untuk autentikasi). Untuk menonaktifkan TLS secara eksplisit (misalnya, jika client tidak mendukungnya), atur parameter sslmode ke disable.
postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}?sslmode=disable

Untuk terhubung ke SLS menggunakan protokol PostgreSQL melalui JDBC, gunakan konfigurasi berikut:

private static final String URL = "jdbc:postgresql://{Endpoint}:5432/{Project_Name}?preferQueryMode=simple";
private static final String AccessKey_ID = "xyz";
private static final String AccessKey_Secret = "123456";

public static void main(String[] args) throws Exception
{
    Properties props = new Properties();
    props.setProperty(PGProperty.USER.getName(), AccessKey_ID);
    props.setProperty(PGProperty.PASSWORD.getName(), AccessKey_Secret);

    try (Connection conn = DriverManager.getConnection(URL, props)) {
        System.out.println("Koneksi berhasil!");
    }
}

Deskripsi parameter:

Parameter

Deskripsi

Contoh

AccessKey_ID

ID AccessKey akun Alibaba Cloud atau Pengguna RAM Anda.

LTAI5t***

AccessKey_Secret

Rahasia AccessKey akun Alibaba Cloud atau Pengguna RAM Anda.

***

Endpoint

Titik akhir SLS. Untuk informasi selengkapnya, lihat Endpoints. Perhatikan bahwa endpoint harus mencakup nama project (seperti ditunjukkan pada kolom Contoh).

{projectName}.cn-hangzhou.log.aliyuncs.com

Project_Name

Nama project log.

my-project

Kelola tabel

Dalam protokol PostgreSQL SLS, sebuah tabel merepresentasikan logstore SLS.

Buat tabel

Gunakan pernyataan CREATE TABLE untuk membuat logstore:

CREATE TABLE users (
    id           BIGINT,
    name         TEXT,
    create_time  TIMESTAMP
)
WITH (
    shard_count = 4,
    ttl = 14,
    default_query_range = '1d',
    full_text_search_enabled = true,

    index_tokens = '&[ ]",''\',

    log_time_field = 'create_time',
    insert_any_allowed = false
);

Tipe kolom yang didukung:

Tipe PostgreSQL

Tipe SLS

Deskripsi

int8/bigint/int4/integer/int2/smallint/oid

long

Tipe bilangan bulat

text/varchar/char/bpchar/uuid

text

Tipe string

float4/real/float8/double precision/numeric

double

Tipe bilangan pecahan

json

json

Tipe JSON

Properti tabel (klause WITH):

Nama properti

Type

Deskripsi

Nilai default

Contoh

shard_count

Integer

Jumlah shard dalam logstore.

4

4

ttl

Integer

Periode retensi data dalam hari.

365

14

default_query_range

String

Rentang waktu kueri default. Format: {n}{d/m/s} (hari/menit/detik).

'1d'

'3d'

full_text_search_enabled

Boolean

Menentukan apakah indeks teks penuh diaktifkan.

false

true

index_tokens

String

Token yang digunakan untuk tokenisasi.

Pembatas default

'&[]",'''

log_time_field

String

Menentukan bidang yang digunakan sebagai waktu log untuk logstore SLS selama penyisipan data. Tipe bidang harus berupa timestamp atau long (detik epoch, milidetik, mikrodetik, atau nanodetik). Sistem secara otomatis mendeteksi unitnya. Pengaturan ini mengidentifikasi bidang waktu log selama penulisan data.

-

'create_time'

insert_any_allowed

Boolean

Menentukan apakah penulisan data apa pun tanpa validasi skema diizinkan. Atur nilai ini ke false untuk memvalidasi skema data yang ditulis.

true

false

hot_ttl

Integer

Jumlah hari data logstore disimpan dalam penyimpanan hot. Setelah periode ini, data secara otomatis beralih ke Kelas penyimpanan IA. Untuk informasi selengkapnya, lihat Kelola tiering cerdas. Jika parameter ini tidak diatur, data tetap berada di penyimpanan hot sepanjang siklus hidupnya.

-

7

chn_columns

String

Menentukan kolom yang berisi teks berbahasa Tiongkok. Indeks untuk kolom-kolom ini mengaktifkan tokenisasi Tiongkok. Pisahkan beberapa nama kolom dengan koma. Gunakan __line__ untuk menunjukkan indeks teks penuh. Catatan: Mengaktifkan tokenisasi Tiongkok memengaruhi performa. Gunakan dengan hati-hati.

-

'__line__,message,error'

Ubah kolom

Operasi modifikasi kolom berikut didukung:

Tambah kolom:

ALTER TABLE users ADD COLUMN change_time TEXT;

Ubah nama kolom:

ALTER TABLE users RENAME COLUMN change_time TO update_time;

Ubah tipe kolom:

ALTER TABLE users ALTER COLUMN update_time TYPE TIMESTAMP;

Hapus kolom:

ALTER TABLE users DROP COLUMN update_time;

Bersihkan data

Gunakan pernyataan TRUNCATE untuk menghapus semua data dari tabel:

TRUNCATE TABLE users;
Catatan: Setelah data dihapus, perubahan tersebut memerlukan waktu sekitar 30 detik hingga terlihat dalam kueri SQL.

Hapus tabel

Gunakan pernyataan DROP TABLE untuk menghapus tabel (yang juga menghapus logstore terkait):

DROP TABLE users;

Kueri data

Kueri dasar

Gunakan pernyataan SELECT SQL standar untuk menanyakan data:

SELECT id, name FROM users LIMIT 10;
Catatan: Jika rentang waktu tidak ditentukan dalam pernyataan SQL, rentang waktu default yang ditentukan oleh default_query_range akan digunakan. Jika default_query_range tidak diatur saat tabel dibuat, kueri akan menggunakan data 15 menit terakhir secara default.

Tentukan rentang waktu kueri

Tentukan rentang waktu kueri dengan salah satu dari dua cara berikut:

Metode 1: Gunakan bidang __time__

-- Tentukan batas bawah rentang waktu
SELECT id, name FROM users 
WHERE __time__ > 1766646000
LIMIT 10;

-- Tentukan rentang waktu
SELECT id, name FROM users 
WHERE __time__ > 1766646000 AND __time__ < 1766646987
LIMIT 10;
Catatan: Nilai __time__ adalah timestamp Unix dalam satuan detik. Anda harus menetapkan batas bawah agar rentang waktu berlaku. Jika batas atas tidak ditentukan, waktu akhir secara default menggunakan waktu saat ini.

Metode 2: Gunakan variabel query_begin dan query_end

-- Atur batas bawah rentang waktu
SET query_begin = 1766646000; 
SELECT id, name FROM users LIMIT 10;

-- Atur rentang waktu
SET query_begin = 1766646000; 
SET query_end = 1766646987; 
SELECT id, name FROM users LIMIT 10;

-- Atur variabel dalam satu pernyataan (disarankan)
SET query_begin = 1766646000; SET query_end = 1766646987; SELECT id, name FROM users LIMIT 10;
Catatan: Setelah diatur, variabel query_begin dan query_end tetap berlaku sepanjang sesi koneksi. Jalankan show query_begin atau show query_end untuk melihat nilai saat ini. Nilai 0 berarti variabel belum diatur.

Tulis data

Penulisan dasar

Gunakan pernyataan INSERT INTO untuk menulis data:

INSERT INTO users (id, name, create_time) 
VALUES
    (1, 'Name#1', '2025-12-25T06:54:19'),
    (2, 'Name#2', '2025-12-25T06:54:20'),
    (3, 'Name#3', '2025-12-25T06:54:21');

Penulisan EXACTLY-ONCE

Protokol PostgreSQL SLS tidak mendukung kendala keunikan seperti primary key, tetapi mendukung penulisan EXACTLY-ONCE untuk memastikan data hanya ditulis sekali.

Gunakan variabel hash_key dan seq_id untuk menerapkan penulisan EXACTLY-ONCE:

SET hash_key = 'file#1'; 
SET seq_id = 1; 
INSERT INTO users (id, name, create_time) 
VALUES
    (1, 'Name#1', '2025-12-25T06:54:19'),
    (2, 'Name#2', '2025-12-25T06:54:20'),
    (3, 'Name#3', '2025-12-25T06:54:21');

Deskripsi parameter:

Parameter

Deskripsi

hash_key

Kunci unik yang mengidentifikasi sumber data.

seq_id

Nomor seri. Harus dimulai dari 1 dan meningkat secara monoton untuk hash_key yang sama.

Penanganan error data duplikat:

Saat data duplikat ditulis, server mengembalikan pesan error dalam format berikut:

error: sequence id is lower than expected, hash_key=xyz,current sequence_id=100,requested sequence_id=90

Gunakan ekspresi reguler berikut untuk mengekstrak seq_id saat ini dari respons server:

current\s+sequence_id=(\d+)

Kueri metadata

Kueri semua logstore

SELECT 
    table_schema, 
    table_name
FROM 
    information_schema.tables;
Catatan: Secara default, logstore dipetakan ke skema di bawah project dengan nama yang sama.

Kueri struktur bidang

SELECT 
    column_name, 
    data_type
FROM 
    information_schema.columns 
WHERE 
    table_name = 'access_log';

Referensi