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

ApsaraDB RDS:Bitmap function extension (varbitx)

最終更新日:Mar 29, 2026

varbitx プラグインは、ApsaraDB RDS for PostgreSQL の varbit プラグインを拡張し、追加のビット文字列操作を提供します。PostgreSQL コミュニティ版の標準 varbit プラグインは、基本的な BIT 型の関数のみをサポートしています。varbitx は、スライシング、一括設定、位置検索、カウントなどの関数を追加し、リアルタイムのユーザープロファイル推奨、アクセス制御広告、チケット発券などのユースケースに対応します。

前提条件

開始する前に、ご利用の RDS インスタンスが次のいずれかの PostgreSQL バージョンで実行されていることを確認してください。

  • PostgreSQL 11

  • PostgreSQL 10

プラグインのインストールと削除

varbitx プラグインをインストールします。

CREATE EXTENSION varbitx;

プラグインを削除します。

DROP EXTENSION varbitx;

サポートされる関数

すべての関数は、SELECT 文で呼び出します。

SELECT <function>;

以降のセクションでは、各関数をそのシグネチャ、説明、および 入力 → 出力 形式の実行例とともにリストアップします。

抽出関数

ビット文字列を変更せずにビットを読み取る関数です。

関数説明
get_bit(varbit a, int b, int c) returns varbit位置 b から始まる c ビットを varbit 文字列として返します。get_bit('111110000011', 3, 5)11000
get_bit_array(varbit a, int b, int c, int d) returns int[]位置 b から c ビットを抽出し、値が d (0 または 1) に等しいビットの 0 から始まる位置を返します。get_bit_array('111110000011', 3, 5, 1)[3,4]
get_bit_array(varbit a, int b, int[] c) returns int[]添字配列 c で指定された位置のビットを読み取り、値が b (0 または 1) に等しいビットの位置を返します。c にない位置は無視されます。get_bit_array('111110000011', 1, array[1,5,6,7,10,11])[1,10,11]

変更関数

ビット文字列の変更されたコピーを返す関数です。

関数説明
set_bit_array(varbit a, int b, int c, int[] d) returns varbit位置 d のビットを値 b (0 または 1) に設定します。元の長さを超えるビットは、値 c (0 または 1) で埋められます。set_bit_array('111100001111', 0, 1, array[1,15])1011000011111110
set_bit_array(varbit a, int b, int c, int[] d, int e) returns varbit4 引数形式と同じですが、正確に e ビットを返します。set_bit_array('111100001111', 1, 0, array[4,5,6,7], 2)111111001111
set_bit_array_record(varbit a, int b, int c, int[] d) returns (varbit, int[])位置 d のビットを値 b (0 または 1) に設定します。元の長さを超えるビットは、値 c で埋められます。変更されたビット文字列と、変更された位置の添字配列の両方を返します。set_bit_array_record('111100001111', 0, 1, array[1,15])1011000011111110, [1,15]
set_bit_array_record(varbit a, int b, int c, int[] d, int e) returns (varbit, int[])4 引数形式と同じですが、e ビットを変更した直後に停止して返します。set_bit_array_record('111100001111', 1, 0, array[1,4,5,6,7], 2)111111001111, [4,5]

生成関数

新しいビット文字列を生成する関数です。

関数説明
bit_fill(int a, int b) returns varbit長さ b のビット文字列を、すべて値 a (0 または 1) で埋めて返します。bit_fill(0, 10)0000000000
bit_rand(int a, int b, float c) returns varbit長さ a のビット文字列を返します。この文字列では、ビットの約 c (0.0–1.0) がランダムに値 b (0 または 1) に設定されます。bit_rand(10, 1, 0.3)0101000001

カウント関数

指定された値に一致するビットをカウントする関数です。

関数説明
bit_count(varbit a, int b, int c, int d) returns int位置 c から d ビットにわたり、値が b (0 または 1) のビットをカウントします。指定された範囲外のビットはカウントされません。bit_count('1111000011110000', 1, 5, 4)1
bit_count(varbit a, int b) returns intビット文字列全体で、値が b (0 または 1) のすべてのビットをカウントします。bit_count('1111000011110000', 1)8
bit_count_array(varbit a, int b, int[] c) returns int添字配列 c で指定された位置で、値が b (0 または 1) のビットをカウントします。bit_count_array('1111000011110000', 1, array[1,2,7,8])3

位置検索関数

指定された値に一致するビットの位置を返す関数です。

関数説明
bit_posite(varbit a, int b, boolean c) returns int[]値が b (0 または 1) のすべてのビットの 0 から始まる位置を返します。昇順の場合は true、降順の場合は false を渡します。bit_posite('11110010011', 1, true)[0,1,2,3,6,9,10]; bit_posite('11110010011', 1, false)[10,9,6,3,2,1,0]
bit_posite(varbit a, int b, int c, boolean d) returns int[]値が b (0 または 1) のビットの位置を最大 c 個返します。昇順の場合は true、降順の場合は false を渡します。bit_posite('11110010011', 1, 3, true)[0,1,2]; bit_posite('11110010011', 1, 3, false)[10,9,6]

範囲内のセットされたビットのカウント

値が 1 のビットを、位置 5 から 4 ビットにわたってカウントします。

SELECT bit_count('1111000011110000', 1, 5, 4);

出力:

 bit_count
-----------
         1
(1 row)

ビットのセットと変更された位置の返却

位置 1、4、5、6、7 のビットを値 1 に設定し、2 ビットを変更した後に停止し、変更された文字列と変更された位置を返します。

SELECT set_bit_array_record('111100001111', 1, 0, array[1,4,5,6,7], 2);

出力:

   set_bit_array_record
------------------------
 (111111001111,"{4,5}")
(1 row)