1. 程式人生 > >PostgreSQL中網路地址型別

PostgreSQL中網路地址型別

在其他資料庫中,資料型別varchar或bigint可用於儲存IP地址。在PostgreSQL中,我們建議使用一個PG資料庫內建型別來儲存網路地址。

  • inet:這個資料型別可以用來儲存一個IPv4或IPv6地址和它們的子網。資料插入數
    據庫的格式是Address/y,其中y是子網掩碼的位數。

  • cidr:這個資料型別也可以用來儲存網路和網路地址。一旦我們指定cidr資料型別的子網掩碼,如果設定的位數超出了掩碼,PG就會丟擲一個從錯誤。

  • macaddr:儲存不同格式的MAC地址。

下面進行測試

mydb=# create table nettb(id serial,intclmn inet,cidclmn cidr);
CREATE TABLE mydb=# insert into nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.64.2/32'); INSERT 0 1 mydb=# insert into nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.64.2/24'); ERROR: 22P02: invalid cidr value: "192.168.64.2/24" LINE 1: ...nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.6... ^ DETAIL: Value has bits set
to right of mask. mydb=# insert into nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.64.0/24');
INSERT 0 1 mydb=# select * from nettb; id | intclmn | cidclmn ----+--------------+----------------- 1 | 192.168.64.2 | 192.168.64.2/32 2 | 192.168.64.2 | 192.168.64.0/24 (2 rows)

插入幾條測試資料後:

mydb=# select id,intclmn  from nettb;
 id |   intclmn    
----+--------------
  1 | 192.168.64.2
  2 | 192.168.64.2
  3 | 192.168.64.5
  4 | 192.168.64.7
  5 | 192.168.64.6
  6 | 192.168.64.3
  7 | 192.168.10.3
(7 rows)

mydb=# select id,intclmn  from nettb where intclmn <<= inet'192.168.64.5/32';
 id |   intclmn    
----+--------------
  3 | 192.168.64.5
(1 row)

mydb=# select id,intclmn  from nettb where intclmn <<= inet'192.168.64.5/24';
 id |   intclmn    
----+--------------
  1 | 192.168.64.2
  2 | 192.168.64.2
  3 | 192.168.64.5
  4 | 192.168.64.7
  5 | 192.168.64.6
  6 | 192.168.64.3
(6 rows)

By 天蠍座