Amazon Aurora DSQLがアイデンティティカラムとシーケンスオブジェクトをサポート

FEAT AWS What's New · 2026/2/13
要約: Aurora DSQLで自動インクリメントID生成をサポート。注文番号やアカウントIDなど整数ベースの識別子をSQL標準構文で作成可能。PostgreSQLアプリケーションの移行を簡素化し、カスタムID生成ロジックが不要に。

新機能の背景

PostgreSQLアプリケーションの移行を容易に

従来、PostgreSQLからAurora DSQLへの移行では、自動インクリメント機能を持つアイデンティティカラムやシーケンスオブジェクトがサポートされていませんでした。この機能がないことで、既存のPostgreSQLアプリケーションの移行には追加の開発作業が必要となり、移行の障壁となっていました。

データベース管理の整数IDの需要

多くのアプリケーションでは、注文番号、アカウントID、オペレーション参照番号などの人間にとって読みやすい整数ベースのIDが求められます。これまでは、アプリケーションコードやミドルウェアにカスタムID生成ロジックを実装する必要があり、開発の複雑性が増していました。

分散データベースにおけるID生成の課題

Aurora DSQLは分散SQLデータベースとして設計されており、UUIDベースの識別子が推奨されてきました。しかし、レポート作成、外部システムとの統合、ビジネスプロセスにおいては、コンパクトで順序性のある整数IDが必要となるケースが多く存在します。

新機能の概要

アイデンティティカラム(IDENTITY Columns)

アイデンティティカラムは、データベースが自動的に生成する特別なカラムで、テーブルに新しい行が挿入されるたびに、一意の整数値を自動的に割り当てます。

主な特徴:

作成例:

CREATE TABLE people (
    id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000),
    name text,
    address text
);

シーケンスオブジェクト(SEQUENCE Objects)

シーケンスは、一連の一意な整数値を生成するためのデータベースオブジェクトです。テーブルから独立して管理でき、複数のテーブルやカラムで共有することができます。

主な特徴:

PostgreSQL互換性

Aurora DSQLのアイデンティティカラムとシーケンスは、PostgreSQLの標準SQL構文と互換性があります。これにより、既存のPostgreSQLアプリケーションのスキーマやクエリをほとんど変更せずに移行できます。

利用可能なリージョン

この機能は、Aurora DSQLが提供されているすべてのAWSリージョンで利用可能です(2026年2月時点で14リージョン:US East (N. Virginia)、US East (Ohio)、US West (Oregon)、Canada (Central)、Canada West (Calgary)、Asia Pacific (Melbourne)、Asia Pacific (Sydney)、Asia Pacific (Osaka)、Asia Pacific (Tokyo)、Asia Pacific (Seoul)、Europe (Ireland)、Europe (London)、Europe (Frankfurt)、Europe (Paris))。

使い方

基本的なアイデンティティカラムの作成

ALWAYS オプション:

CREATE TABLE orders (
    order_id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000),
    customer_name text,
    order_date timestamp,
    PRIMARY KEY (order_id)
);

-- 挿入時にIDを指定しない(自動生成)
INSERT INTO orders (customer_name, order_date) 
VALUES ('山田太郎', NOW());

-- DEFAULTキーワードでも明示的に自動生成を要求可能
INSERT INTO orders (order_id, customer_name, order_date) 
VALUES (DEFAULT, '佐藤花子', NOW());

BY DEFAULT オプション(明示的な値の挿入を許可):

CREATE TABLE accounts (
    account_id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000),
    account_name text
);

-- 自動生成
INSERT INTO accounts (account_name) VALUES ('企業アカウントA');

-- 明示的な値の挿入も可能
INSERT INTO accounts (account_id, account_name) VALUES (1000, '特別アカウント');

シーケンスの作成と利用

シーケンスの作成:

CREATE SEQUENCE invoice_number_seq
    START WITH 1000
    INCREMENT BY 1
    CACHE 10000;

シーケンスの使用:

-- 次の値を取得
SELECT nextval('invoice_number_seq');

-- テーブルへの挿入で使用
INSERT INTO invoices (invoice_number, customer_id, amount)
VALUES (nextval('invoice_number_seq'), 123, 50000);

-- 現在の値を確認
SELECT currval('invoice_number_seq');

-- 最後に挿入された値を取得
SELECT lastval();

CACHEサイズの選択

Aurora DSQLの分散アーキテクチャにおいて、CACHE設定は性能に重要な影響を与えます。

大きなCACHEサイズ(CACHE >= 65536)が適している場合:

CREATE TABLE telemetry_events (
    event_id bigint GENERATED ALWAYS AS IDENTITY (CACHE 100000),
    device_id text,
    event_data jsonb,
    recorded_at timestamp
);

小さなCACHEサイズ(CACHE 1)が適している場合:

CREATE TABLE customer_accounts (
    account_number bigint GENERATED ALWAYS AS IDENTITY (CACHE 1),
    account_name text,
    created_at timestamp
);

UUIDとの併用パターン

Aurora DSQLでは、スケーラビリティが重要な場合にUUIDを主キーとして使用することが推奨されています。整数IDは、人間が読みやすい識別子やレポート用の補助的な識別子として併用することができます。

CREATE TABLE products (
    product_uuid uuid DEFAULT gen_random_uuid() PRIMARY KEY,
    product_number bigint GENERATED ALWAYS AS IDENTITY (CACHE 10000),
    product_name text,
    price numeric(10,2)
);

-- UUIDは主キーとして内部的に使用
-- product_numberは外部向けの製品番号として使用

アイデンティティカラムの変更

既存のアイデンティティカラムの設定は、ALTER TABLEコマンドで変更できます。

-- CACHE設定の変更
ALTER TABLE orders 
    ALTER COLUMN order_id SET CACHE 50000;

-- GENERATED動作の変更
ALTER TABLE orders 
    ALTER COLUMN order_id SET GENERATED BY DEFAULT;

-- アイデンティティプロパティの削除
ALTER TABLE orders 
    ALTER COLUMN order_id DROP IDENTITY;

注意点

1. 一意性の保証について

アイデンティティカラムは自動的に一意な値を生成しますが、一意性制約は自動的には適用されません。一意性を強制するには、明示的にPRIMARY KEYまたはUNIQUE制約を定義する必要があります。

-- 推奨:PRIMARY KEYまたはUNIQUE制約を追加
CREATE TABLE orders (
    order_id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000),
    order_info text,
    PRIMARY KEY (order_id)  -- 一意性を保証
);

2. CACHE設定の重要性

CACHE設定は、Aurora DSQLの分散環境でのパフォーマンスに大きな影響を与えます。

注意点:

3. 欠番の発生

以下の状況でIDに欠番が発生する可能性があります:

対策: 欠番が許容できないビジネスロジックの場合は、CACHE=1を設定し、生成頻度を低く保つ必要があります。

4. データ型の制限

アイデンティティカラムに使用できるデータ型は、シーケンスがサポートするデータ型に限定されます:

大量のIDが必要な場合は、bigintの使用を推奨します。

5. トランザクション制限との関係

Aurora DSQLには、単一トランザクションで変更できる行数に制限があります。大量のデータを一度に挿入する場合は、バッチ処理を1,000行単位などに分割することが推奨されます。

-- バッチ処理の例
DO $$
DECLARE
    batch_size INT := 1000;
BEGIN
    FOR i IN 1..10 LOOP
        INSERT INTO events (event_type, event_data)
        SELECT 'type' || j, 'data' || j
        FROM generate_series(1, batch_size) j;
        COMMIT;
    END LOOP;
END $$;

6. 既存のPostgreSQLからの移行時の注意

7. UUIDとの使い分け

Aurora DSQLの公式ドキュメントでは、以下のガイダンスが示されています:

8. 料金への影響

アイデンティティカラムとシーケンスの使用自体に追加料金はかかりませんが、以下の点に注意:


補完情報の出典