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

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

最終更新日:Dec 18, 2025

この Topic では、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 アドレス範囲。

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

次の 3 つのデータの型は、単一の IP アドレスを格納するために使用されます。

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

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

  • ipaddressip4 または 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 (割り当て)

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

以下の 3 つのデータ型は、IP アドレスの範囲を格納するために使用されます:

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

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

  • iprangeip4r または 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;