加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL数据类型:网络地址类型

发布时间:2020-12-13 17:15:30 所属栏目:百科 来源:网络整理
导读:感谢原作者整理分享。在此mark一下。 官方文档:http://www.postgresql.org/docs/9.4/interactive/datatype-net-types.html 一、cidr postgres=#createtabletest(idint,nametext);CREATETABLEpostgres=#dtestTable"public.test"Column|Type|Modifiers------

感谢原作者整理分享。在此mark一下。

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

一、cidr

postgres=#createtabletest(idint,nametext);
CREATETABLE
postgres=#dtest
Table"public.test"
Column|Type|Modifiers
--------+---------+-----------
id|integer|
name|text|

postgres=#altertabletestaddcolumnipcidr;
ALTERTABLE
postgres=#dtest
Table"public.test"
Column|Type|Modifiers
--------+---------+-----------
id|integer|
name|text|
ip|cidr|
postgres=#insertintotestvalues(1,'a','192.168.1.100');
INSERT01
postgres=#select*fromtest;
id|name|ip
----+------+------------------
1|a|192.168.1.100/32
(1row)
postgres=#insertintotestvalues(2,'b','192.168.0.0/16');
INSERT01
postgres=#select*fromtest;
id|name|ip
----+------+------------------
1|a|192.168.1.100/32
2|b|192.168.0.0/16
(2rows)
postgres=#insertintotestvalues(3,'c','192.168.1.0/24');
INSERT01
postgres=#select*fromtest;
id|name|ip
----+------+------------------
1|a|192.168.1.100/32
2|b|192.168.0.0/16
3|c|192.168.1.0/24
(3rows)

查询使用

postgres=#select*fromtestwhereip='192.168.1.100';
id|name|ip
----+------+------------------
1|a|192.168.1.100/32
(1row)
postgres=#select*fromtestwhereip>='192.168.1.0/24';
id|name|ip
----+------+------------------
1|a|192.168.1.100/32
3|c|192.168.1.0/24
(2rows)

postgres=#select*fromtestwhereip>='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
(3rows)
postgres=#updatetestsetip='192.168.1.101/32'whereid=2;
UPDATE1
postgres=#updatetestsetip='192.168.1.102/32'whereid=3;
UPDATE1
postgres=#select*fromtest;
id|name|ip
----+------+------------------
1|a|192.168.1.100/32
2|b|192.168.1.101/32
3|c|192.168.1.102/32
(3rows)
postgres=#select*fromtestwhereipbetween'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
(2rows)

postgres=#select*fromtestwhereipbetween'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
(3rows)

二、inet

将cidr修改为inet

postgres=#dtest
Table"public.test"
Column|Type|Modifiers
--------+---------+-----------
id|integer|
name|text|
ip|cidr|
postgres=#altertabletestaltercolumniptypeinet;
ALTERTABLE
postgres=#dtest
Table"public.test"
Column|Type|Modifiers
--------+---------+-----------
id|integer|
name|text|
ip|inet|
postgres=#select*fromtest;
id|name|ip
----+------+---------------
1|a|192.168.1.100
2|b|192.168.1.101
3|c|192.168.1.102
(3rows)

postgres=#updatetestsetip='192.168.0.0/16'whereid=3;
UPDATE1
postgres=#select*fromtest;
id|name|ip
----+------+----------------
1|a|192.168.1.100
2|b|192.168.1.101
3|c|192.168.0.0/16
(3rows)

postgres=#updatetestsetip='192.168.1.0/24'whereid=2;
UPDATE1
postgres=#select*fromtest;
id|name|ip
----+------+----------------
1|a|192.168.1.100
3|c|192.168.0.0/16
2|b|192.168.1.0/24
(3rows)

可见,inet默认32位掩码的ip是不带'/32'的

postgres=#select*fromtestwhereip>='192.168.1.100';
id|name|ip
----+------+---------------
1|a|192.168.1.100
(1row)

postgres=#select*fromtestwhereip>='192.168.1.1';
id|name|ip
----+------+---------------
1|a|192.168.1.100
(1row)

postgres=#select*fromtestwhereip>='192.168.1.101';
id|name|ip
----+------+----
(0rows)
postgres=#select*fromtestwhereip>='192.168.1.0/32';
id|name|ip
----+------+---------------
1|a|192.168.1.100
(1row)
postgres=#select*fromtestwhereip>='192.168.1.0/16';
id|name|ip
----+------+----------------
1|a|192.168.1.100
2|b|192.168.1.0/24
(2rows)

postgres=#select*fromtestwhereip>='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
(3rows)

使用跟cidr差不多

三、macaddr

postgres=#dtest
Table"public.test"
Column|Type|Modifiers
--------+---------+-----------
id|integer|
name|text|
ip|inet|

postgres=#altertabletestaddcolumnmacmacaddr;
ALTERTABLE
postgres=#dtest
Table"public.test"
Column|Type|Modifiers
--------+---------+-----------
id|integer|
name|text|
ip|inet|
mac|macaddr|

postgres=#select*fromtest;
id|name|ip|mac
----+------+----------------+-----
1|a|192.168.1.100|
3|c|192.168.0.0/16|
2|b|192.168.1.0/24|
(3rows)
postgres=#updatetestsetmac='08:00:2b:01:02:03'whereid=1;
UPDATE1
postgres=#select*fromtest;
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
(3rows)
postgres=#updatetestsetmac='08:00:2b:01:02:04'whereid=2;
UPDATE1
postgres=#updatetestsetmac='08:00:2b:01:02:05'whereid=3;
UPDATE1
postgres=#select*fromtest;
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
(3rows)
查询使用
postgres=#select*fromtestwheremac='08:00:2b:01:02:03';
id|name|ip|mac
----+------+---------------+-------------------
1|a|192.168.1.100|08:00:2b:01:02:03
(1row)

postgres=#select*fromtestwheremac>'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
(2rows)

PostgreSQL默认还不支持iprange,需要安装ip4r的扩展,详见:http://pgfoundry.org/projects/ip4r/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读