Tous les produits
Search
Centre de documentation

Simple Log Service:Connect to SLS using the PostgreSQL protocol

Dernière mise à jour :Aug 18, 2026

SLS prend en charge le protocole PostgreSQL. Utilisez psql, JDBC ou tout autre outil compatible avec PostgreSQL pour lire, écrire et gérer les données de journalisation à l'aide du langage SQL.

Fonctionnalités

Le protocole PostgreSQL vous permet d'effectuer les opérations suivantes :

  • Gérer les Logstores à l'aide de la syntaxe SQL standard (création, modification, suppression).

  • Analyser les données de journalisation en utilisant la syntaxe SQL de PostgreSQL.

  • Écrire des données de journalisation à l'aide d'instructions INSERT.

  • Interroger les métadonnées du schéma du Logstore à l'aide de la syntaxe native de PostgreSQL, entièrement compatible avec les tables système de PostgreSQL.

Limites

Les limites suivantes s'appliquent :

Limitations

Description

Prepared Statement

Les instructions préparées (parse/bind/execute) ne sont pas prises en charge. Pour JDBC, définissez le mode de requête sur simple :

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

Ou définissez le paramètre preferQueryMode dans l'URL JDBC :

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

Prise en charge des transactions

Les instructions begin, commit et rollback sont ignorées et n'ont aucun effet.

Clés primaires et valeurs par défaut

Les contraintes telles que les clés primaires et les valeurs par défaut ne sont pas prises en charge.

Prérequis

  • Vous avez créé un projet.

  • Vous disposez d'une paire AccessKey (AccessKey ID et AccessKey secret). Créer une AccessKey.

  • Un client compatible avec PostgreSQL (tel que psql) est installé.

Se connecter à SLS

Format de l'URL de connexion du client PostgreSQL :

postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}
# The connection enables TLS by default (MD5 for authentication). To explicitly disable TLS (for example, if the client does not support it), set the sslmode parameter to disable.
postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}?sslmode=disable

Exemple de connexion JDBC :

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("Connection successful!");
    }
}

Paramètres

Paramètre

Description

Exemple

AccessKey_ID

L'AccessKey ID de votre compte Alibaba Cloud ou utilisateur RAM.

LTAI5t***

AccessKey_Secret

L'AccessKey secret de votre compte Alibaba Cloud ou utilisateur RAM.

***

Endpoint

L'endpoint SLS. Doit inclure le nom du projet comme indiqué dans la colonne Exemple. Endpoints.

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

Project_Name

Le nom du projet de journalisation.

my-project

Gérer les tables

Une table correspond à un Logstore SLS.

Créer une table

Créez un Logstore avec CREATE TABLE :

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

Types de colonnes pris en charge :

Type PostgreSQL

Type SLS

Description

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

long

Type entier

text/varchar/char/bpchar/uuid

text

Type chaîne

float4/real/float8/double precision/numeric

double

Type nombre à virgule flottante

json

json

Type JSON

Propriétés de la table (clause WITH) :

Nom de la propriété

Type

Description

Valeur par défaut

Exemple

shard_count

Entier

Le nombre de shards dans le Logstore.

4

4

ttl

Entier

La période de rétention des données en jours.

365

14

default_query_range

Chaîne

La plage de temps de requête par défaut. Format : {n}{d/m/s} (jour/minute/seconde).

'1d'

'3d'

full_text_search_enabled

Booléen

Indique si l'indexation en texte intégral est activée.

false

true

index_tokens

Chaîne

Les jetons utilisés pour la tokenisation.

Délimiteurs par défaut

'&[]",'''

log_time_field

Chaîne

Le champ utilisé comme horodatage du journal lors des écritures. Doit être de type timestamp ou long (secondes, millisecondes, microsecondes ou nanosecondes epoch). L'unité est détectée automatiquement.

-

'create_time'

insert_any_allowed

Booléen

Indique si les écritures sans validation de schéma sont autorisées. Définissez cette valeur sur false pour appliquer les vérifications de schéma.

true

false

hot_ttl

Entier

Nombre de jours pendant lesquels les données sont conservées dans le stockage chaud avant de passer au stockage IA. Si ce paramètre n'est pas défini, les données restent dans le stockage chaud pendant toute la durée du TTL. Gérer le classement intelligent.

-

7

chn_columns

Chaîne

Colonnes contenant du texte chinois, permettant la tokenisation chinoise pour leurs index. Séparez plusieurs noms par des virgules. Utilisez __line__ pour l'index en texte intégral. Remarque : la tokenisation chinoise affecte les performances. À utiliser avec précaution.

-

'__line__,message,error'

Modifier une colonne

Modifications de colonnes prises en charge :

Ajouter une colonne :

ALTER TABLE users ADD COLUMN change_time TEXT;

Renommer une colonne :

ALTER TABLE users RENAME COLUMN change_time TO update_time;

Modifier le type d'une colonne :

ALTER TABLE users ALTER COLUMN update_time TYPE TIMESTAMP;

Supprimer une colonne :

ALTER TABLE users DROP COLUMN update_time;

Effacer les données

Effacez toutes les données d'une table avec TRUNCATE :

TRUNCATE TABLE users;
Remarque : Après la suppression des données, il faut environ 30 secondes pour que la modification soit visible dans les requêtes SQL.

Supprimer une table

Supprimez une table et son Logstore correspondant avec DROP TABLE :

DROP TABLE users;

Interroger les données

Requête de base

Interrogez les données avec SELECT :

SELECT id, name FROM users LIMIT 10;
Remarque : Si aucune plage de temps n'est spécifiée dans l'instruction SQL, la plage de temps par défaut définie par default_query_range est utilisée. Si default_query_range n'a pas été défini lors de la création de la table, la requête porte par défaut sur les 15 dernières minutes de données.

Spécifier une plage de temps de requête

Deux méthodes permettent de spécifier une plage de temps de requête :

Méthode 1 : Utiliser le champ __time__

-- Specify the lower limit of the time range
SELECT id, name FROM users 
WHERE __time__ > 1766646000
LIMIT 10;

-- Specify the time range
SELECT id, name FROM users 
WHERE __time__ > 1766646000 AND __time__ < 1766646987
LIMIT 10;
Remarque : La valeur de __time__ est un horodatage Unix en secondes. Vous devez définir une limite inférieure pour que la plage de temps prenne effet. Si aucune limite supérieure n'est définie, l'heure de fin correspond par défaut à l'heure actuelle.

Méthode 2 : Utiliser les variables query_begin et query_end

-- Set the lower limit of the time range
SET query_begin = 1766646000; 
SELECT id, name FROM users LIMIT 10;

-- Set the time range
SET query_begin = 1766646000; 
SET query_end = 1766646987; 
SELECT id, name FROM users LIMIT 10;

-- Set the variables in a single statement (recommended)
SET query_begin = 1766646000; SET query_end = 1766646987; SELECT id, name FROM users LIMIT 10;
Remarque : Une fois définies, les variables query_begin et query_end restent valides pour toute la session de connexion. Exécutez show query_begin ou show query_end pour afficher leurs valeurs actuelles. Une valeur de 0 signifie que la variable n'a pas été définie.

Écrire des données

Écriture de base

Écrivez des données avec INSERT INTO :

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

Écritures EXACTLY-ONCE

SLS ne prend pas en charge les contraintes d'unicité de clé primaire, mais fournit une sémantique EXACTLY-ONCE pour éviter les écritures en double.

Définissez hash_key et seq_id pour activer les écritures 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');

Paramètres

Paramètre

Description

hash_key

Une clé unique qui identifie la source de données.

seq_id

Le numéro de série. Il doit commencer à 1 et augmenter de manière monotone pour le même hash_key.

Gestion des erreurs de données en double :

En cas d'écritures en double, le serveur renvoie une erreur :

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

Extrayez le seq_id actuel avec cette expression régulière :

current\s+sequence_id=(\d+)

Interroger les métadonnées

Interroger tous les Logstores

SELECT 
    table_schema, 
    table_name
FROM 
    information_schema.tables;
Remarque : Par défaut, un Logstore est mappé à un schéma portant le même nom que le projet.

Interroger la structure des champs

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

Références