PostgreSQL之網路地址類型

來源:互聯網
上載者:User

標籤:

官方文檔:http://www.postgresql.org/docs/9.4/interactive/datatype-net-types.html

一、cidr
postgres=# create table test (id int, name text);CREATE TABLEpostgres=# \d test      Table "public.test" Column |  Type   | Modifiers --------+---------+----------- id     | integer |  name   | text    | postgres=# alter table test add column ip cidr;ALTER TABLEpostgres=# \d test      Table "public.test" Column |  Type   | Modifiers --------+---------+----------- id     | integer |  name   | text    |  ip     | cidr    | postgres=# insert into test values (1, ‘a‘, ‘192.168.1.100‘);INSERT 0 1postgres=# select * from test ; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32(1 row)postgres=# insert into test values (2, ‘b‘, ‘192.168.0.0/16‘);INSERT 0 1postgres=# select * from test ; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32  2 | b    | 192.168.0.0/16(2 rows)postgres=# insert into test values (3, ‘c‘, ‘192.168.1.0/24‘);INSERT 0 1postgres=# select * from test ; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32  2 | b    | 192.168.0.0/16  3 | c    | 192.168.1.0/24(3 rows)

查詢使用

postgres=# select * from test where ip = ‘192.168.1.100‘; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32(1 row)postgres=#  select * from test where ip >= ‘192.168.1.0/24‘; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32  3 | c    | 192.168.1.0/24(2 rows)postgres=#  select * from test where ip >= ‘192.168.0.0/16‘; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32  2 | b    | 192.168.0.0/16  3 | c    | 192.168.1.0/24(3 rows)

postgres=# update test set ip = ‘192.168.1.101/32‘ where id = 2;UPDATE 1postgres=# update test set ip = ‘192.168.1.102/32‘ where id = 3; UPDATE 1postgres=# select * from test ; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32  2 | b    | 192.168.1.101/32  3 | c    | 192.168.1.102/32(3 rows)postgres=# select * from test where  ip between ‘192.168.1.100‘ and ‘192.168.1.101‘; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32  2 | b    | 192.168.1.101/32(2 rows)postgres=# select * from test where  ip between ‘192.168.1.100‘ and ‘192.168.1.102‘; id | name |        ip        ----+------+------------------  1 | a    | 192.168.1.100/32  2 | b    | 192.168.1.101/32  3 | c    | 192.168.1.102/32(3 rows)

二、inet

將cidr修改為inet

postgres=# \d test      Table "public.test" Column |  Type   | Modifiers --------+---------+----------- id     | integer |  name   | text    |  ip     | cidr    | postgres=# alter table test alter column ip type inet;ALTER TABLEpostgres=# \d test      Table "public.test" Column |  Type   | Modifiers --------+---------+----------- id     | integer |  name   | text    |  ip     | inet    |

postgres=# select * from test ; id | name |      ip       ----+------+---------------  1 | a    | 192.168.1.100  2 | b    | 192.168.1.101  3 | c    | 192.168.1.102(3 rows)postgres=# update test set ip = ‘192.168.0.0/16‘ where id = 3;UPDATE 1postgres=# select * from test ;                                id | name |       ip       ----+------+----------------  1 | a    | 192.168.1.100  2 | b    | 192.168.1.101  3 | c    | 192.168.0.0/16(3 rows)postgres=# update test set ip = ‘192.168.1.0/24‘ where id = 2;   UPDATE 1postgres=# select * from test ; id | name |       ip       ----+------+----------------  1 | a    | 192.168.1.100  3 | c    | 192.168.0.0/16  2 | b    | 192.168.1.0/24(3 rows)

可見,inet預設32位元遮罩的ip是不帶‘/32‘的

postgres=# select * from test where ip >= ‘192.168.1.100‘; id | name |      ip       ----+------+---------------  1 | a    | 192.168.1.100(1 row)postgres=# select * from test where ip >= ‘192.168.1.1‘;   id | name |      ip       ----+------+---------------  1 | a    | 192.168.1.100(1 row)postgres=# select * from test where ip >= ‘192.168.1.101‘; id | name | ip ----+------+----(0 rows)postgres=# select * from test where ip >= ‘192.168.1.0/32‘; id | name |      ip       ----+------+---------------  1 | a    | 192.168.1.100(1 row)postgres=# select * from test where ip >= ‘192.168.1.0/16‘; id | name |       ip       ----+------+----------------  1 | a    | 192.168.1.100  2 | b    | 192.168.1.0/24(2 rows)postgres=# select * from test where ip >= ‘192.168.0.0/16‘; id | name |       ip       ----+------+----------------  1 | a    | 192.168.1.100  3 | c    | 192.168.0.0/16  2 | b    | 192.168.1.0/24(3 rows)

使用跟cidr差不多

三、macaddr
postgres=# \d test      Table "public.test" Column |  Type   | Modifiers --------+---------+----------- id     | integer |  name   | text    |  ip     | inet    | postgres=# alter table test add column mac macaddr;ALTER TABLEpostgres=# \d test     Table "public.test" Column |  Type   | Modifiers --------+---------+----------- id     | integer |  name   | text    |  ip     | inet    |  mac    | macaddr | postgres=# select * from test ; id | name |       ip       | mac ----+------+----------------+-----  1 | a    | 192.168.1.100  |   3 | c    | 192.168.0.0/16 |   2 | b    | 192.168.1.0/24 | (3 rows)

postgres=# update test set mac = ‘08:00:2b:01:02:03‘ where id = 1;UPDATE 1postgres=# select * from test ; id | name |       ip       |        mac        ----+------+----------------+-------------------  3 | c    | 192.168.0.0/16 |   2 | b    | 192.168.1.0/24 |   1 | a    | 192.168.1.100  | 08:00:2b:01:02:03(3 rows)postgres=# update test set mac = ‘08:00:2b:01:02:04‘ where id = 2; UPDATE 1postgres=# update test set mac = ‘08:00:2b:01:02:05‘ where id = 3; UPDATE 1postgres=# select * from test ; id | name |       ip       |        mac        ----+------+----------------+-------------------  1 | a    | 192.168.1.100  | 08:00:2b:01:02:03  2 | b    | 192.168.1.0/24 | 08:00:2b:01:02:04  3 | c    | 192.168.0.0/16 | 08:00:2b:01:02:05(3 rows)

查詢使用

postgres=# select * from test where mac = ‘08:00:2b:01:02:03‘; id | name |      ip       |        mac        ----+------+---------------+-------------------  1 | a    | 192.168.1.100 | 08:00:2b:01:02:03(1 row)postgres=# select * from test where mac > ‘08:00:2b:01:02:03‘; id | name |       ip       |        mac        ----+------+----------------+-------------------  2 | b    | 192.168.1.0/24 | 08:00:2b:01:02:04  3 | c    | 192.168.0.0/16 | 08:00:2b:01:02:05(2 rows)

PostgreSQL預設還不支援iprange,需要安裝ip4r的擴充,詳見:http://pgfoundry.org/projects/ip4r/

PostgreSQL之網路地址類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.