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

PolarDB:Ip4r (ネットワークアドレスストレージ)

最終更新日:Aug 27, 2026

このトピックでは、ip4r 拡張の背景、データ型、および使用方法について説明します。

適用性

次のバージョンの PolarDB for PostgreSQL がサポートされています:

  • PostgreSQL 17 (マイナーエンジンバージョン 2.0.17.6.4.0 以降)

  • PostgreSQL 16 (マイナーエンジンバージョン 2.0.16.9.9.0 以降)

  • PostgreSQL 15 (マイナーエンジンバージョン 2.0.15.14.6.0 以降)

  • PostgreSQL 14 (マイナーエンジンバージョン 2.0.14.9.13.0 以降)

  • PostgreSQL 11 (マイナーエンジンバージョン 2.0.11.9.36.0 以降)

説明

コンソール で、または SHOW polardb_version; ステートメントを実行して、マイナーエンジンバージョンを確認できます。マイナーエンジンバージョンが要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードしてください。

背景

ip4r は、PolarDB for PostgreSQL および がサポートするサードパーティの拡張です。IPv4 および IPv6 アドレスを格納するためのデータ型を提供します。PostgreSQL に組み込まれている inet と cidr のデータ型とは異なり、ip4r は contains 演算子 >>= を使用したインデックススキャンをサポートします。さらに、ip4r には、PostgreSQL の組み込みネットワークデータ型に比べて次の利点があります:

  • より明確なセマンティクス:ネットワークブロック と、ネットワークブロック内の特定の IP アドレス を区別します。

  • オーバーヘッドの低減:PostgreSQL は IPv6 データを格納するために可変長のデータ型を使用します。このため、IPv4 データのみを格納する必要がある場合に大きなオーバーヘッドが発生します。これに対し、ip4r は単一アドレスには固定長のデータ型を使用します。

データ型

ip4r は、IPv4 または IPv6 データを格納し、表現するためのさまざまなデータ型を提供します:

データ型

説明

ip4

単一の IPv4 アドレス。

ip4r

任意の IPv4 アドレス範囲。

ip6

単一の IPv6 アドレス。

ip6r

任意の IPv6 アドレス範囲。

ipaddress

単一の IPv4 または IPv6 アドレス。

iprange

任意の IPv4 または IPv6 アドレス範囲。

単一アドレスのデータ型と型変換

単一の IP アドレスを格納するには、次の 3 つのデータ型を使用します:

  • ip4:nnn.nnn.nnn.nnn 形式の入力を受け付けます。データは 32 ビットの符号なし整数として格納されます。

  • ip6:IPv6 アドレスの標準 16 進数形式の入力を受け付けます。データは 2 つの 64 ビット値として格納されます。

  • ipaddress:ip4 形式または ip6 形式の入力を受け付けます。

これら 3 つのデータ型について、ip4r は次の型変換ルールを提供します:

説明

次の表では、ipX は上記で説明した 3 つのデータ型のいずれかを表します。

ソース型

ターゲット型

形式

ipX

text

text(ipX) または ipX::text (明示的)

text

ipX

ipX(text) または text::ipX (明示的)

ipX

cidr

cidr(ipX) または ipX::cidr (代入)

inet

ipX

ipX(inet) または inet::ipX (代入)

ipX

numeric

to_numeric(ipX) または ipX::numeric (明示的)

numeric

ipX

ipX(numeric) または bigint::ipX (明示的)

ip4

bigint

to_bigint(ip4) または ip4::bigint (明示的)

bigint

ip4

ip4(bigint) または bigint::ip4 (明示的)

ip4

float8

to_double(ip4) または ip4::float8 (明示的)

float8

ip4

ip4(float8) または float8::ip4 (明示的)

ipX

varbit

to_bit(ipX) または ipX::varbit (明示的)

bit(32)

ip4

ip4(bit) または bit::ip4 (明示的)

bit(128)

ip6

ip6(bit) または bit::ip6 (明示的)

varbit

ipX

ipX(varbit) または varbit::ipX (明示的)

ipX

bytea

to_bytea(ipX) または ipX::bytea (明示的)

bytea

ipX

ipX(bytea) または bytea::ipX (明示的)

ipX

ipXr

ipXr(ipX) または ipX::ipXr (暗黙的)

ip4

ipaddress

ipaddress(ip4) または ip4::ipaddress (暗黙的)

ip6

ipaddress

ipaddress(ip6) または ip6::ipaddress (暗黙的)

ipaddress

ip4

ip4(ipaddress) または ipaddress::ip4 (代入)

ipaddress

ip6

ip6(ipaddress) または ipaddress::ip6 (代入)

アドレス範囲のデータ型と型変換

IP アドレスの範囲を格納するには、次の 3 つのデータ型を使用します:

  • ip4r:IPv4 アドレス範囲を格納します。例:192.0.2.100-192.0.2.200。範囲 192.0.2.0/24 は 192.0.2.0-192.0.2.255 と同等です。

  • ip6r:IPv6 アドレス範囲を格納します。例:2001::1234-2001::2000:0000。範囲 2001::/112 は 2001::-2001::ffff と同等です。

  • iprange:ip4r 形式または ip6r 形式の入力を受け付けます。

これら 3 つのデータ型について、ip4r は次の型変換ルールを提供します:

説明

次の表では、ipXr は上記で説明した 3 つのデータ型のいずれかを表します。

ソース型

ターゲット型

形式

ipX

ipXr

ipXr(ipX) または ipX::ipXr (暗黙的)

ipXr

text

text(ipXr) または ipXr::text (明示的)

text

ipXr

ipXr(text) または text::ipXr (明示的)

ipXr

cidr

cidr(ipXr) または ipXr::cidr (明示的)

cidr

ipXr

ipXr(cidr) または cidr::ipXr (代入)

ipXr

varbit

to_bit(ipXr) または ipXr::varbit (明示的)

varbit

ip4r

ip4r(varbit) または varbit::ip4r (明示的)

varbit

ip6r

ip6r(varbit) または varbit::ip6r (明示的)

使用方法

拡張の作成

CREATE EXTENSION ip4r;

テストテーブルの作成とデータのインポート

CREATE TABLE ipranges (r iprange, r4 ip4r, r6 ip6r);
INSERT INTO ipranges
    SELECT r, null, r
    FROM (
        SELECT ip6r(regexp_replace(ls, E'(....(?!$))', E'\\1:', 'g')::ip6,
               regexp_replace(substring(ls FOR n + 1) || substring(us FROM n + 2),
               E'(....(?!$))', E'\\1:', 'g')::ip6) AS r
        FROM (
            SELECT md5(i || ' lower 1') AS ls,
                   md5(i || ' upper 1') AS us,
                   (i % 11) + (i/11 % 11) + (i/121 % 11) AS n
            FROM generate_series(1,13310) i) s1) s2;

GiST インデックスの作成

CREATE INDEX ipranges_r ON ipranges USING gist (r);

contains 演算子の使用

EXPLAIN (COSTS OFF) SELECT * FROM ipranges WHERE r >>= '5555::' ORDER BY r;

次の結果が返されます:

                     QUERY PLAN                      
-----------------------------------------------------
 Sort
   Sort Key: r
   ->  Bitmap Heap Scan on ipranges
         Recheck Cond: (r >>= '5555::'::iprange)
         ->  Bitmap Index Scan on ipranges_r
               Index Cond: (r >>= '5555::'::iprange)
(6 rows)

拡張のアンインストール

DROP EXTENSION ip4r;