すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:PostgreSQL プロトコルを使用した Simple Log Service への接続

最終更新日:Mar 18, 2026

Simple Log Service (SLS) は PostgreSQL プロトコルと互換性があり、標準の JDBC ドライバーを介した接続をサポートしています。psql クライアント、JDBC ドライバー、または PostgreSQL プロトコルをサポートする任意のツールを使用して SLS に接続し、データの読み取り、書き込み、管理を行うための SQL ステートメントを実行できます。

機能

PostgreSQL プロトコルを使用して SLS に接続すると、以下の操作が可能です。

  • 標準の SQL 構文(CREATE、MODIFY、DROP)を使用してログストアを管理します。

  • PostgreSQL の SQL 構文を使用してログデータを分析します。

  • INSERT ステートメントを使用してログデータを書き込みます。

  • ネイティブな PostgreSQL 構文でログストアのスキーマメタデータをシームレスにクエリし、PostgreSQL のシステムテーブルとの完全な互換性を確保します。

制限事項

PostgreSQL プロトコルを使用して SLS に接続する場合、以下の制限が適用されます。

制約事項

説明

プリペアドステートメント

PostgreSQL プロトコルにおけるプリペアドステートメントの実行(PARSE/BIND/EXECUTE)はサポートされていません。JDBC を使用する場合は、明示的に PG クエリモードを simple に設定してください。たとえば、次の接続プロパティーを設定します。

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

または、JDBC URL 内で preferQueryMode パラメーターを設定します。

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

トランザクションのサポート

BEGIN、COMMIT、ROLLBACK ステートメントは無視され、効果がありません。

プライマリキーおよびデフォルト値

プライマリキーおよびデフォルト値などの制約はサポートされていません。

前提条件

  • プロジェクト を作成済みである。

  • AccessKey ID および AccessKey Secret を取得済みである。詳細については、「AccessKey の作成」をご参照ください。

  • PostgreSQL クライアントツール(例:psql)または PostgreSQL プロトコルをサポートするその他のツールをインストール済みである。

SLS への接続

PostgreSQL クライアントを使用して SLS に接続するには、次の URL 形式を使用します。

postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}
# 接続では TLS がデフォルトで有効化されています(認証方式は MD5)。TLS を明示的に無効化する場合(たとえばクライアントが TLS をサポートしていない場合)、sslmode パラメーターを disable に設定します。
postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}?sslmode=disable

JDBC を介して PostgreSQL プロトコルで SLS に接続するには、次の構成を使用します。

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("接続に成功しました!");
    }
}

パラメーターの説明:

パラメーター

説明

AccessKey_ID

Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。

LTAI5t***

AccessKey_Secret

Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。

***

Endpoint

SLS のエンドポイント。詳細については、「エンドポイント」をご参照ください。エンドポイントにはプロジェクト名が含まれている必要があります(列に示すとおり)。

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

Project_Name

ログプロジェクトの名称。

my-project

テーブルの管理

SLS の PostgreSQL プロトコルでは、テーブルは SLS のログストアに対応します。

テーブルの作成

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

サポートされるカラム型:

PostgreSQL 型

SLS 型

説明

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

long

整数型

text/varchar/char/bpchar/uuid

text

文字列型

float4/real/float8/double precision/numeric

double

浮動小数点数型

json

json

JSON 型

テーブルプロパティ(WITH 句):

プロパティ名

説明

デフォルト値

shard_count

Integer

ログストア内のシャード数。

4

4

ttl

Integer

データ保持期間(日単位)。

365

14

default_query_range

String

デフォルトのクエリ時間範囲。フォーマット:{n}{d/m/s}(日/分/秒)。

'1d'

'3d'

full_text_search_enabled

Boolean

フルテキストインデックスを有効化するかどうかを指定します。

false

true

index_tokens

String

形態素解析に使用するトークン。

デフォルトのデリミタ

'&[]",'''

log_time_field

String

データ挿入時に SLS ログストアのログ時刻として使用するフィールドを指定します。フィールド型は timestamp または long(エポック秒、ミリ秒、マイクロ秒、ナノ秒)である必要があります。システムが自動的に単位を検出します。この設定により、データ書き込み時のログ時刻フィールドが識別されます。

-

'create_time'

insert_any_allowed

Boolean

スキーマ検証なしで任意のデータを書き込むことを許可するかどうかを指定します。書き込まれるデータのスキーマを検証するには、この値を false に設定します。

true

false

hot_ttl

Integer

ログストアのデータがホットストレージに保持される日数。この期間が経過すると、データは自動的に低頻度アクセス(IA)ストレージクラスへトランジションします。詳細については、「インテリジェントティアリングの管理」をご参照ください。このパラメーターが設定されていない場合、データはライフサイクル全体にわたりホットストレージに保持されます。

-

7

chn_columns

String

中国語テキストを含むカラムを定義します。これらのカラムのインデックスにより、中国語の形態素解析が可能になります。複数のカラム名はカンマで区切ります。全文検索を示すには __line__ を使用します。注:中国語の形態素解析を有効化すると、パフォーマンスに影響を与える可能性があります。慎重に使用してください。

-

'__line__,message,error'

カラムの変更

以下のカラム変更操作がサポートされています。

カラムの追加:

ALTER TABLE users ADD COLUMN change_time TEXT;

カラム名の変更:

ALTER TABLE users RENAME COLUMN change_time TO update_time;

カラム型の変更:

ALTER TABLE users ALTER COLUMN update_time TYPE TIMESTAMP;

カラムの削除:

ALTER TABLE users DROP COLUMN update_time;

データのクリア

TRUNCATE ステートメントを使用してテーブル内のすべてのデータをクリアします。

TRUNCATE TABLE users;
注:データが削除された後、SQL クエリで変更が反映されるまで約 30 秒かかります。

テーブルの削除

DROP TABLE ステートメントを使用してテーブルを削除します(対応するログストアも削除されます)。

DROP TABLE users;

データのクエリ

基本的なクエリ

標準の SQL SELECT ステートメントを使用してデータをクエリします。

SELECT id, name FROM users LIMIT 10;
注:SQL ステートメント内で時間範囲が指定されていない場合、default_query_range で定義されたデフォルトの時間範囲が使用されます。テーブル作成時に default_query_range が設定されていない場合、クエリは直近 15 分間のデータをデフォルトで対象とします。

クエリ時間範囲の指定

以下のいずれかの方法でクエリ時間範囲を指定します。

方法 1:__time__ フィールドの使用

-- 時間範囲の下限を指定
SELECT id, name FROM users 
WHERE __time__ > 1766646000
LIMIT 10;

-- 時間範囲を指定
SELECT id, name FROM users 
WHERE __time__ > 1766646000 AND __time__ < 1766646987
LIMIT 10;
注:__time__ の値は、秒単位の UNIX タイムスタンプです。時間範囲の下限を設定しなければ、範囲は有効になりません。上限が設定されていない場合、終了時刻は現在時刻になります。

方法 2:query_begin および query_end 変数の使用

-- 時間範囲の下限を設定
SET query_begin = 1766646000; 
SELECT id, name FROM users LIMIT 10;

-- 時間範囲を設定
SET query_begin = 1766646000; 
SET query_end = 1766646987; 
SELECT id, name FROM users LIMIT 10;

-- 単一のステートメントで変数を設定(推奨)
SET query_begin = 1766646000; SET query_end = 1766646987; SELECT id, name FROM users LIMIT 10;
注:一度設定された query_begin および query_end 変数は、接続セッション全体で有効です。現在の値を確認するには、show query_begin または show query_end を実行します。値が 0 の場合、その変数は未設定です。

データの書き込み

基本的な書き込み

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

EXACTLY-ONCE 書き込み

SLS の PostgreSQL プロトコルは、プライマリキーなどの一意性制約をサポートしていませんが、データが 1 度だけ書き込まれることを保証する EXACTLY-ONCE 書き込みをサポートしています。

hash_key および seq_id 変数を使用して 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');

パラメーターの説明:

パラメーター

説明

hash_key

データソースを識別する一意キー。

seq_id

シリアル番号。同じ hash_key に対しては、1 から始まり、単調増加する必要があります。

重複データのエラー処理:

重複データが書き込まれた場合、サーバーは以下の形式でエラーメッセージを返します。

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

サーバーの応答から現在の seq_id を抽出するには、以下の正規表現を使用します。

current\s+sequence_id=(\d+)

メタデータのクエリ

すべてのログストアのクエリ

SELECT 
    table_schema, 
    table_name
FROM 
    information_schema.tables;
注:デフォルトでは、ログストアは同名のプロジェクト内のスキーマにマップされます。

フィールド構造のクエリ

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

参考