Todos os produtos
Search
Central de documentação

Simple Log Service:Connect to SLS using the PostgreSQL protocol

Última atualização: Jul 03, 2026

O SLS oferece suporte ao protocolo PostgreSQL. Use psql, JDBC ou qualquer ferramenta compatível com PG para ler, gravar e gerenciar dados de log com SQL.

Recursos

Com o protocolo PostgreSQL, você pode:

  • Gerenciar logstores com sintaxe SQL padrão (criar, modificar, excluir).

  • Analisar dados de log com a sintaxe SQL do PostgreSQL.

  • Gravar dados de log usando instruções INSERT.

  • Consultar metadados de esquema do logstore com sintaxe nativa do PostgreSQL, totalmente compatível com as tabelas de sistema do PostgreSQL.

Limites

Os limites a seguir se aplicam:

Limitações

Descrição

Prepared Statement

Instruções preparadas (parse/bind/execute) não têm suporte. Para JDBC, defina o modo de consulta como simple:

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

Ou defina o parâmetro preferQueryMode na URL JDBC:

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

Suporte a transações

As instruções begin, commit e rollback são ignoradas e não produzem efeito.

Chaves primárias e valores padrão

Restrições como chaves primárias e valores padrão não têm suporte.

Pré-requisitos

  • Crie um projeto.

  • Obtenha um par de AccessKey (AccessKey ID e AccessKey secret). Criar um AccessKey.

  • Instale um cliente compatível com PostgreSQL (como psql).

Conectar-se ao SLS

Formato da URL de conexão do 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

Exemplo de conexão 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

Descrição

Exemplo

AccessKey_ID

O AccessKey ID da sua conta Alibaba Cloud ou usuário RAM.

LTAI5t***

AccessKey_Secret

O AccessKey secret da sua conta Alibaba Cloud ou usuário RAM.

***

Endpoint

O endpoint do SLS. Deve incluir o nome do projeto conforme mostrado na coluna Exemplo. Endpoints.

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

Project_Name

O nome do projeto de log.

my-project

Gerenciar tabelas

Uma tabela corresponde a um logstore do SLS.

Criar uma tabela

Crie um logstore com 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 coluna com suporte:

Tipo PostgreSQL

Tipo SLS

Descrição

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

long

Tipo inteiro

text/varchar/char/bpchar/uuid

text

Tipo string

float4/real/float8/double precision/numeric

double

Tipo de ponto flutuante

json

json

Tipo JSON

Propriedades da tabela (cláusula WITH):

Nome da propriedade

Tipo

Descrição

Valor padrão

Exemplo

shard_count

Integer

Quantidade de shards no logstore.

4

4

ttl

Integer

Período de retenção de dados em dias.

365

14

default_query_range

String

Intervalo de tempo padrão para consultas. Formato: {n}{d/m/s} (dia/minuto/segundo).

'1d'

'3d'

full_text_search_enabled

Boolean

Indica se a indexação de texto completo deve ser ativada.

false

true

index_tokens

String

Tokens usados para tokenização.

Delimitadores padrão

'&[]",'''

log_time_field

String

Campo usado como horário do log durante gravações. Deve ser timestamp ou long (segundos, milissegundos, microssegundos ou nanossegundos desde epoch). A unidade é detectada automaticamente.

-

'create_time'

insert_any_allowed

Boolean

Indica se gravações sem validação de esquema são permitidas. Defina como false para impor verificações de esquema.

true

false

hot_ttl

Integer

Dias para reter dados no armazenamento quente antes da transição para o armazenamento IA. Se não definido, os dados permanecem no armazenamento quente durante todo o TTL. Gerenciar camadas inteligentes.

-

7

chn_columns

String

Colunas que contêm texto em chinês, habilitando a tokenização chinesa para seus índices. Separe vários nomes com vírgulas. Use __line__ para índice de texto completo. Nota: A tokenização chinesa afeta o desempenho. Use com cautela.

-

'__line__,message,error'

Modificar uma coluna

Modificações de coluna com suporte:

Adicionar uma coluna:

ALTER TABLE users ADD COLUMN change_time TEXT;

Renomear uma coluna:

ALTER TABLE users RENAME COLUMN change_time TO update_time;

Modificar o tipo de uma coluna:

ALTER TABLE users ALTER COLUMN update_time TYPE TIMESTAMP;

Excluir uma coluna:

ALTER TABLE users DROP COLUMN update_time;

Limpar dados

Limpe todos os dados de uma tabela com TRUNCATE:

TRUNCATE TABLE users;
Nota : Após a exclusão dos dados, a alteração leva cerca de 30 segundos para se tornar visível nas consultas SQL.

Excluir uma tabela

Exclua uma tabela e seu logstore correspondente com DROP TABLE:

DROP TABLE users;

Consultar dados

Consulta básica

Consulte dados com SELECT:

SELECT id, name FROM users LIMIT 10;
Nota : Caso nenhum intervalo de tempo seja especificado na instrução SQL, o intervalo padrão definido por default_query_range será utilizado. Se default_query_range não foi definido durante a criação da tabela, a consulta usará como padrão os últimos 15 minutos de dados.

Especificar um intervalo de tempo de consulta

Existem duas formas de especificar o intervalo de tempo da consulta:

Método 1: Usar o 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 : O valor de __time__ é um timestamp Unix em segundos. É obrigatório definir um limite inferior para que o intervalo tenha efeito. Se nenhum limite superior for definido, o horário final assumirá o horário atual como padrão.

Método 2: Usar as variáveis query_begin e 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 : Uma vez definidas, as variáveis query_begin e query_end permanecem válidas durante toda a sessão de conexão. Execute show query_begin ou show query_end para visualizar seus valores atuais. Um valor igual a 0 indica que a variável não foi definida.

Gravar dados

Gravação básica

Grave dados com 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');

Gravações EXACTLY-ONCE

O SLS não suporta restrições de unicidade de chave primária, mas fornece semântica EXACTLY-ONCE para evitar gravações duplicadas.

Defina hash_key e seq_id para ativar gravações 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

Descrição

hash_key

Chave única que identifica a origem dos dados.

seq_id

Número de série. Deve começar em 1 e aumentar monotonicamente para o mesmo hash_key.

Tratamento de erro de dados duplicados:

Em caso de gravações duplicadas, o servidor retorna um erro:

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

Extraia o seq_id atual com esta expressão regular:

current\s+sequence_id=(\d+)

Consultar metadados

Consultar todos os logstores

SELECT 
    table_schema, 
    table_name
FROM 
    information_schema.tables;
Nota : Por padrão, um logstore é mapeado para um esquema dentro de um projeto com o mesmo nome.

Consultar a estrutura de campos

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

Referências