このページは機械翻訳によるものです。内容の正確さは保証しておりません。 人力翻訳を依頼する

ip4r

更新日時2025-01-23 07:12

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

前提条件

この拡張機能は、次のエンジンを実行するPolarDB for PostgreSQL (Compatible with Oracle) クラスターでサポートされています。

  • PolarDB for PostgreSQL (Oracle互換) 2.0 (バージョン2.0.14.13.0以降)

  • PolarDB for PostgreSQL (Oracle互換) 1.0 (バージョン1.1.36以降)

説明

次のステートメントを実行して、PolarDB for PostgreSQL (Compatible with Oracle) クラスターのリビジョンバージョンを表示できます。

SHOW polar_version;

概要

ip4rは、 PolarDB for PostgreSQL (Oracle互換) でサポートされているサードパーティの拡張機能です。 IPv4またはIPv6アドレスを格納するデータ型を提供します。 PostgreSQLによって提供されるinet /cidrデータ型とは異なり、ip4r拡張機能は、クエリが >>= (contains or equals) 演算子を使用する場合にインデックススキャンをサポートします。 さらに、ip4r拡張機能には、組み込みのネットワークアドレスタイプのPostgreSQLよりも次の利点があります。

  • セマンティックオーバーロードが少ない: ネットブロック特定のIPアドレスを処理するための特殊なデータ型を提供します。

  • オーバーヘッドの削減: PostgreSQLは可変長のデータ型を使用して、IPv6アドレスとIPv4アドレスの両方を格納します。 これにより、IPv4アドレスのみを含むユースケースでは、大きなオーバーヘッドが発生します。 ip4r拡張機能は、IPv4またはIPv6アドレスに合わせた固定長データ型を提供します。

データ型

ip4rは、IPv4およびIPv6アドレスを格納および表すための幅広いデータ型を提供します。

データ型

説明

データ型

説明

ip4

単一のIPv4アドレス

ip4r

IPv4ネットブロック

ip6

単一のIPv6アドレス

ip6r

IPv6ネットブロック

ipaddress

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

iprange

IPv4またはIPv6ネットブロック

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

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

  • ip4: nnn.nnn.nnn.nnnの形式で入力を受け付けます。 IPアドレスを32ビットの符号なし整数として格納します。

  • ip6: IPv6アドレスの標準16進表現の形式で入力を受け付けます。 IPアドレスを2つの64ビット値として格納します。

  • ipaddress: ip4またはip6のいずれかで有効な入力を受け入れます。

次の表に、ip4rの上記3つの型の型変換を示します。

説明

表のipXは、前述の3つのデータ型のいずれかを表します。

ソースタイプ

宛先タイプ

構文

ソースタイプ

宛先タイプ

構文

ipX

text

テキスト (ipX) またはipX::text (explicit)

text

ipX

ipX (テキスト) またはtext::ipX (明示的)

ipX

cidr

cidr(ipX) またはipX::cidr (割り当て)

inet

ipX

ipX(inet) またはinet::ipX (assignment)

ipX

numeric

to_numeric(ipX) またはipX::numeric (explicit)

numeric

ipX

ipX (数値) またはbigint::ipX (明示的)

ip4

bigint

to_bigint(ip4) またはip4::bigint (explicit)

bigint

ip4

ip4(bigint) またはbigint::ip4 (explicit)

ip4

float8

to_double(ip4) またはip4::float8 (explicit)

float8

ip4

ip4(float8) またはfloat8::ip4 (explicit)

ipX

varbit

to_bit(ipX) またはipX::varbit (explicit)

ビット (32)

ip4

ip4 (ビット) またはビット::ip4 (明示的)

bit(128)

ip6

ip6 (ビット) またはビット::ip6 (明示的)

varbit

ipX

ipX(varbit) またはvarbit::ipX (explicit)

ipX

bytea

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

bytea

ipX

ipX(bytea) またはbytea::ipX (explicit)

ipX

ipXr

ipXr(ipX) またはipX::ipXr (implicit)

ip4

ipaddress

ipaddress(ip4) またはip4::ipaddress (implicit)

ip6

ipaddress

ipaddress(ip6) またはip6::ipaddress (implicit)

ipaddress

ip4

ip4(ipaddress) またはipaddress::ip4 (割り当て)

ipaddress

ip6

ip6(ipaddress) またはipaddress::ip6 (割り当て)

ネットブロックのデータ型と型変換

ネットブロックの格納には、次の3つのデータ型が使用されます。

  • ip4r: 192.0.2.100-192.0.2.200などのIPv4ネットブロックを格納するために使用されます。 また、192.0.2.0/24などのCIDRブロックの形式で入力を受け付けます。これは192.0.2.0-192.0.2.255に相当します。

  • ip6r: 2001::1234-2001::2000:0000などのIPv6ネットブロックを格納するために使用されます。 また、2001::/112などのCIDRブロックの形式で入力を受け付けます。これは、2001::-2001::ffffに相当します。

  • iprange: ip4rまたはip6rのいずれかで有効な入力を受け入れます。

次の表に、ip4rの上記3つの型の型変換を示します。

説明

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

ソースタイプ

宛先タイプ

構文

ソースタイプ

宛先タイプ

構文

ipX

ipXr

ipXr(ipX) またはipX::ipXr (implicit)

ipXr

text

text(ipXr) またはipXr::text (explicit)

text

ipXr

ipXr (テキスト) またはtext::ipXr (明示的)

ipXr

cidr

cidr(ipXr) またはipXr::cidr (explicit)

cidr

ipXr

ipXr(cidr) またはcidr::ipXr (割り当て)

ipXr

varbit

to_bit(ipXr) またはipXr::varbit (explicit)

varbit

ip4r

ip4r(varbit) またはvarbit::ip4r (explicit)

varbit

ip6r

ip6r(varbit) またはvarbit::ip6r (explicit)

使用法

ip4r拡張子の作成

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 or equals) 演算子を使用する

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)

拡張機能を削除するRemove the extension

DROP EXTENSION ip4r;
  • 目次 (1, M)
  • 前提条件
  • 概要
  • データ型
  • 単一IPアドレスのデータ型と型変換
  • ネットブロックのデータ型と型変換
  • 使用法
フィードバック