Todos los productos
Search
Centro de documentos

Simple Log Service:Connect to SLS using the PostgreSQL protocol

Última actualización: Sep 02, 2026

SLS es compatible con el protocolo PostgreSQL. Utilice psql, JDBC o cualquier herramienta compatible con PG para leer, escribir y gestionar datos de registro mediante SQL.

Funciones

Mediante el protocolo PostgreSQL, usted puede:

  • Gestionar logstores con la sintaxis estándar de SQL (crear, modificar, eliminar).

  • Analizar datos de registro con la sintaxis SQL de PostgreSQL.

  • Escribir datos de registro mediante instrucciones INSERT.

  • Consultar metadatos del esquema del logstore con la sintaxis nativa de PostgreSQL, totalmente compatible con las tablas del sistema de PostgreSQL.

Límites

Se aplican los siguientes límites:

Limitaciones

Descripción

Prepared Statement

Las instrucciones preparadas (parse/bind/execute) no son compatibles. Para JDBC, establezca el modo de consulta en simple:

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

O bien, configure el parámetro preferQueryMode en la URL de JDBC:

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

Compatibilidad con transacciones

Las instrucciones begin, commit y rollback se ignoran y no tienen ningún efecto.

Claves primarias y valores predeterminados

No se admiten restricciones como claves primarias ni valores predeterminados.

Requisitos previos

  • Ha creado un project.

  • Cuenta con un par de AccessKey (AccessKey ID y AccessKey secret). Create an AccessKey.

  • Tiene instalado un cliente compatible con PostgreSQL (como psql).

Conexión a SLS

Formato de la URL de conexión del cliente 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

Ejemplo de conexión 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!");
    }
}

Parámetros

Parámetro

Descripción

Ejemplo

AccessKey_ID

El AccessKey ID de su cuenta de Alibaba Cloud o usuario RAM.

LTAI5t***

AccessKey_Secret

El AccessKey secret de su cuenta de Alibaba Cloud o usuario RAM.

***

Endpoint

El endpoint de SLS. Debe incluir el nombre del proyecto como se muestra en la columna Ejemplo. Endpoints.

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

Project_Name

El nombre del proyecto de registro.

my-project

Gestión de tablas

Una tabla se asigna a un logstore de SLS.

Creación de una tabla

Cree un logstore con 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
);

Tipos de columna admitidos:

Tipo de PostgreSQL

Tipo de SLS

Descripción

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

long

Tipo entero

text/varchar/char/bpchar/uuid

text

Tipo cadena

float4/real/float8/double precision/numeric

double

Tipo número de punto flotante

json

json

Tipo JSON

Propiedades de la tabla (cláusula WITH):

Nombre de propiedad

Tipo

Descripción

Valor predeterminado

Ejemplo

shard_count

Integer

El número de shards en el logstore.

4

4

ttl

Integer

El periodo de retención de datos en días.

365

14

default_query_range

String

El intervalo de tiempo de consulta predeterminado. Formato: {n}{d/m/s} (día/minuto/segundo).

'1d'

'3d'

full_text_search_enabled

Boolean

Indica si se habilita la indización de texto completo.

false

true

index_tokens

String

Los tokens utilizados para la tokenización.

Delimitadores predeterminados

'&[]",'''

log_time_field

String

El campo que se utiliza como hora del registro durante las escrituras. Debe ser timestamp o long (segundos, milisegundos, microsegundos o nanosegundos epoch). La unidad se detecta automáticamente.

-

'create_time'

insert_any_allowed

Boolean

Indica si se permiten escrituras sin validación de esquema. Establezca este valor en false para aplicar las comprobaciones de esquema.

true

false

hot_ttl

Integer

Días para conservar los datos en almacenamiento caliente antes de pasar al almacenamiento IA. Si no se configura, los datos permanecen en almacenamiento caliente durante todo su TTL. Manage intelligent tiering.

-

7

chn_columns

String

Columnas que contienen texto en chino, lo que habilita la tokenización en chino para sus índices. Separe varios nombres con comas. Utilice __line__ para el índice de texto completo. Nota: La tokenización en chino afecta el rendimiento. Úsela con precaución.

-

'__line__,message,error'

Modificación de una columna

Modificaciones de columna admitidas:

Agregar una columna:

ALTER TABLE users ADD COLUMN change_time TEXT;

Cambiar el nombre de una columna:

ALTER TABLE users RENAME COLUMN change_time TO update_time;

Modificar el tipo de una columna:

ALTER TABLE users ALTER COLUMN update_time TYPE TIMESTAMP;

Eliminar una columna:

ALTER TABLE users DROP COLUMN update_time;

Limpieza de datos

Elimine todos los datos de una tabla con TRUNCATE:

TRUNCATE TABLE users;
Nota : Después de eliminar los datos, el cambio tarda aproximadamente 30 segundos en reflejarse en las consultas SQL.

Eliminación de una tabla

Elimine una tabla y su logstore correspondiente con DROP TABLE:

DROP TABLE users;

Consulta de datos

Consulta básica

Consulte datos con SELECT:

SELECT id, name FROM users LIMIT 10;
Nota : Si no se especifica un intervalo de tiempo en la instrucción SQL, se utiliza el intervalo predeterminado definido por default_query_range . Si no se configuró default_query_range al crear la tabla, la consulta toma por defecto los últimos 15 minutos de datos.

Especificación de un intervalo de tiempo de consulta

Existen dos formas de especificar un intervalo de tiempo de consulta:

Método 1: Uso del campo __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;
Nota : El valor de __time__ es una marca de tiempo Unix en segundos. Debe establecer un límite inferior para que el intervalo de tiempo surta efecto. Si no se establece un límite superior, la hora de finalización toma por defecto la hora actual.

Método 2: Uso de las variables query_begin y 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;
Nota : Una vez configuradas, las variables query_begin y query_end permanecen vigentes durante toda la sesión de conexión. Ejecute show query_begin o show query_end para consultar sus valores actuales. Un valor de 0 indica que la variable no se ha configurado.

Escritura de datos

Escritura básica

Escriba datos con 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');

Escrituras EXACTLY-ONCE

SLS no admite restricciones de unicidad de clave primaria, pero proporciona semántica EXACTLY-ONCE para evitar escrituras duplicadas.

Configure hash_key y seq_id para habilitar las escrituras 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');

Parámetros

Parámetro

Descripción

hash_key

Una clave única que identifica el origen de datos.

seq_id

El número de serie. Debe comenzar en 1 y aumentar monótonamente para el mismo hash_key.

Manejo de errores por datos duplicados:

En caso de escrituras duplicadas, el servidor devuelve un error:

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

Extraiga el seq_id actual con esta expresión regular:

current\s+sequence_id=(\d+)

Consulta de metadatos

Consulta de todos los logstores

SELECT 
    table_schema, 
    table_name
FROM 
    information_schema.tables;
Nota : Por defecto, un logstore se asigna a un esquema dentro de un proyecto con el mismo nombre.

Consulta de la estructura de campos

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

Referencias