PostgreSQL の SEQUENCE の実体

PostgreSQL の SEQUENCE の実体はテーブルです。 CREATE SEQUENCE したときに SEQUENCE と同じ名前の 1 行だけの特殊なテーブルを作成します。

次のように \d で SEQUENCE の状態を確認することができます。

db=# \d test_sequence

      Sequence "public.test_sequence"
    Column     |  Type   |        Value
---------------+---------+---------------------
sequence_name | name    | test_sequence
last_value    | bigint  | 9
start_value   | bigint  | 1
increment_by  | bigint  | 1
max_value     | bigint  | 9223372036854775807
min_value     | bigint  | 1
cache_value   | bigint  | 1
log_cnt       | bigint  | 26
is_cycled     | boolean | f
is_called     | boolean | t

SEQUENCE の実体はテーブルなので 次のように SQL の FROM 句に SEQUENCE 名を指定しても 中身を見ることができます。

db=# \x
Expanded display is on.

db=# SELECT * FROM public.test_sequence;

-[ RECORD 1 ]-+--------------------
sequence_name | test_sequence
last_value    | 9
start_value   | 1
increment_by  | 1
max_value     | 9223372036854775807
min_value     | 1
cache_value   | 1
log_cnt       | 26
is_cycled     | f
is_called     | t 

PostgreSQL は view もテーブルとルールを使って実現していますが 少ない実装で多くの機能を実現するというのはカッコいいですね。

Google サイト内検索

Amazonアソシエイト