Fix xslt_process() to ensure that it inserts a NULL terminator after the
[PostgreSQL.git] / src / test / regress / expected / inet.out
blobabb59d4acf12e7597cbc7ce6abbde9fcb47cab8a
1 --
2 -- INET
3 --
4 -- prepare the table...
5 DROP TABLE INET_TBL;
6 ERROR:  table "inet_tbl" does not exist
7 CREATE TABLE INET_TBL (c cidr, i inet);
8 INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.226/24');
9 INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.0/26', '192.168.1.226');
10 INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.0/24');
11 INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.0/25');
12 INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.255/24');
13 INSERT INTO INET_TBL (c, i) VALUES ('192.168.1', '192.168.1.255/25');
14 INSERT INTO INET_TBL (c, i) VALUES ('10', '10.1.2.3/8');
15 INSERT INTO INET_TBL (c, i) VALUES ('10.0.0.0', '10.1.2.3/8');
16 INSERT INTO INET_TBL (c, i) VALUES ('10.1.2.3', '10.1.2.3/32');
17 INSERT INTO INET_TBL (c, i) VALUES ('10.1.2', '10.1.2.3/24');
18 INSERT INTO INET_TBL (c, i) VALUES ('10.1', '10.1.2.3/16');
19 INSERT INTO INET_TBL (c, i) VALUES ('10', '10.1.2.3/8');
20 INSERT INTO INET_TBL (c, i) VALUES ('10', '11.1.2.3/8');
21 INSERT INTO INET_TBL (c, i) VALUES ('10', '9.1.2.3/8');
22 INSERT INTO INET_TBL (c, i) VALUES ('10:23::f1', '10:23::f1/64');
23 INSERT INTO INET_TBL (c, i) VALUES ('10:23::8000/113', '10:23::ffff');
24 INSERT INTO INET_TBL (c, i) VALUES ('::ffff:1.2.3.4', '::4.3.2.1/24');
25 -- check that CIDR rejects invalid input:
26 INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.2/30', '192.168.1.226');
27 ERROR:  invalid cidr value: "192.168.1.2/30"
28 LINE 1: INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.2/30', '192.1...
29                                             ^
30 DETAIL:  Value has bits set to right of mask.
31 INSERT INTO INET_TBL (c, i) VALUES ('1234::1234::1234', '::1.2.3.4');
32 ERROR:  invalid input syntax for type cidr: "1234::1234::1234"
33 LINE 1: INSERT INTO INET_TBL (c, i) VALUES ('1234::1234::1234', '::1...
34                                             ^
35 -- check that CIDR rejects invalid input when converting from text:
36 INSERT INTO INET_TBL (c, i) VALUES (cidr('192.168.1.2/30'), '192.168.1.226');
37 ERROR:  invalid cidr value: "192.168.1.2/30"
38 LINE 1: INSERT INTO INET_TBL (c, i) VALUES (cidr('192.168.1.2/30'), ...
39                                                  ^
40 DETAIL:  Value has bits set to right of mask.
41 INSERT INTO INET_TBL (c, i) VALUES (cidr('ffff:ffff:ffff:ffff::/24'), '::192.168.1.226');
42 ERROR:  invalid cidr value: "ffff:ffff:ffff:ffff::/24"
43 LINE 1: INSERT INTO INET_TBL (c, i) VALUES (cidr('ffff:ffff:ffff:fff...
44                                                  ^
45 DETAIL:  Value has bits set to right of mask.
46 SELECT '' AS ten, c AS cidr, i AS inet FROM INET_TBL;
47  ten |        cidr        |       inet       
48 -----+--------------------+------------------
49      | 192.168.1.0/24     | 192.168.1.226/24
50      | 192.168.1.0/26     | 192.168.1.226
51      | 192.168.1.0/24     | 192.168.1.0/24
52      | 192.168.1.0/24     | 192.168.1.0/25
53      | 192.168.1.0/24     | 192.168.1.255/24
54      | 192.168.1.0/24     | 192.168.1.255/25
55      | 10.0.0.0/8         | 10.1.2.3/8
56      | 10.0.0.0/32        | 10.1.2.3/8
57      | 10.1.2.3/32        | 10.1.2.3
58      | 10.1.2.0/24        | 10.1.2.3/24
59      | 10.1.0.0/16        | 10.1.2.3/16
60      | 10.0.0.0/8         | 10.1.2.3/8
61      | 10.0.0.0/8         | 11.1.2.3/8
62      | 10.0.0.0/8         | 9.1.2.3/8
63      | 10:23::f1/128      | 10:23::f1/64
64      | 10:23::8000/113    | 10:23::ffff
65      | ::ffff:1.2.3.4/128 | ::4.3.2.1/24
66 (17 rows)
68 -- now test some support functions
69 SELECT '' AS ten, i AS inet, host(i), text(i), family(i) FROM INET_TBL;
70  ten |       inet       |     host      |       text       | family 
71 -----+------------------+---------------+------------------+--------
72      | 192.168.1.226/24 | 192.168.1.226 | 192.168.1.226/24 |      4
73      | 192.168.1.226    | 192.168.1.226 | 192.168.1.226/32 |      4
74      | 192.168.1.0/24   | 192.168.1.0   | 192.168.1.0/24   |      4
75      | 192.168.1.0/25   | 192.168.1.0   | 192.168.1.0/25   |      4
76      | 192.168.1.255/24 | 192.168.1.255 | 192.168.1.255/24 |      4
77      | 192.168.1.255/25 | 192.168.1.255 | 192.168.1.255/25 |      4
78      | 10.1.2.3/8       | 10.1.2.3      | 10.1.2.3/8       |      4
79      | 10.1.2.3/8       | 10.1.2.3      | 10.1.2.3/8       |      4
80      | 10.1.2.3         | 10.1.2.3      | 10.1.2.3/32      |      4
81      | 10.1.2.3/24      | 10.1.2.3      | 10.1.2.3/24      |      4
82      | 10.1.2.3/16      | 10.1.2.3      | 10.1.2.3/16      |      4
83      | 10.1.2.3/8       | 10.1.2.3      | 10.1.2.3/8       |      4
84      | 11.1.2.3/8       | 11.1.2.3      | 11.1.2.3/8       |      4
85      | 9.1.2.3/8        | 9.1.2.3       | 9.1.2.3/8        |      4
86      | 10:23::f1/64     | 10:23::f1     | 10:23::f1/64     |      6
87      | 10:23::ffff      | 10:23::ffff   | 10:23::ffff/128  |      6
88      | ::4.3.2.1/24     | ::4.3.2.1     | ::4.3.2.1/24     |      6
89 (17 rows)
91 SELECT '' AS ten, c AS cidr, broadcast(c),
92   i AS inet, broadcast(i) FROM INET_TBL;
93  ten |        cidr        |    broadcast     |       inet       |               broadcast               
94 -----+--------------------+------------------+------------------+---------------------------------------
95      | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.226/24 | 192.168.1.255/24
96      | 192.168.1.0/26     | 192.168.1.63/26  | 192.168.1.226    | 192.168.1.226
97      | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.0/24   | 192.168.1.255/24
98      | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.0/25   | 192.168.1.127/25
99      | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.255/24 | 192.168.1.255/24
100      | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.255/25 | 192.168.1.255/25
101      | 10.0.0.0/8         | 10.255.255.255/8 | 10.1.2.3/8       | 10.255.255.255/8
102      | 10.0.0.0/32        | 10.0.0.0         | 10.1.2.3/8       | 10.255.255.255/8
103      | 10.1.2.3/32        | 10.1.2.3         | 10.1.2.3         | 10.1.2.3
104      | 10.1.2.0/24        | 10.1.2.255/24    | 10.1.2.3/24      | 10.1.2.255/24
105      | 10.1.0.0/16        | 10.1.255.255/16  | 10.1.2.3/16      | 10.1.255.255/16
106      | 10.0.0.0/8         | 10.255.255.255/8 | 10.1.2.3/8       | 10.255.255.255/8
107      | 10.0.0.0/8         | 10.255.255.255/8 | 11.1.2.3/8       | 11.255.255.255/8
108      | 10.0.0.0/8         | 10.255.255.255/8 | 9.1.2.3/8        | 9.255.255.255/8
109      | 10:23::f1/128      | 10:23::f1        | 10:23::f1/64     | 10:23::ffff:ffff:ffff:ffff/64
110      | 10:23::8000/113    | 10:23::ffff/113  | 10:23::ffff      | 10:23::ffff
111      | ::ffff:1.2.3.4/128 | ::ffff:1.2.3.4   | ::4.3.2.1/24     | 0:ff:ffff:ffff:ffff:ffff:ffff:ffff/24
112 (17 rows)
114 SELECT '' AS ten, c AS cidr, network(c) AS "network(cidr)",
115   i AS inet, network(i) AS "network(inet)" FROM INET_TBL;
116  ten |        cidr        |   network(cidr)    |       inet       |  network(inet)   
117 -----+--------------------+--------------------+------------------+------------------
118      | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.226/24 | 192.168.1.0/24
119      | 192.168.1.0/26     | 192.168.1.0/26     | 192.168.1.226    | 192.168.1.226/32
120      | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.0/24   | 192.168.1.0/24
121      | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.0/25   | 192.168.1.0/25
122      | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.255/24 | 192.168.1.0/24
123      | 192.168.1.0/24     | 192.168.1.0/24     | 192.168.1.255/25 | 192.168.1.128/25
124      | 10.0.0.0/8         | 10.0.0.0/8         | 10.1.2.3/8       | 10.0.0.0/8
125      | 10.0.0.0/32        | 10.0.0.0/32        | 10.1.2.3/8       | 10.0.0.0/8
126      | 10.1.2.3/32        | 10.1.2.3/32        | 10.1.2.3         | 10.1.2.3/32
127      | 10.1.2.0/24        | 10.1.2.0/24        | 10.1.2.3/24      | 10.1.2.0/24
128      | 10.1.0.0/16        | 10.1.0.0/16        | 10.1.2.3/16      | 10.1.0.0/16
129      | 10.0.0.0/8         | 10.0.0.0/8         | 10.1.2.3/8       | 10.0.0.0/8
130      | 10.0.0.0/8         | 10.0.0.0/8         | 11.1.2.3/8       | 11.0.0.0/8
131      | 10.0.0.0/8         | 10.0.0.0/8         | 9.1.2.3/8        | 9.0.0.0/8
132      | 10:23::f1/128      | 10:23::f1/128      | 10:23::f1/64     | 10:23::/64
133      | 10:23::8000/113    | 10:23::8000/113    | 10:23::ffff      | 10:23::ffff/128
134      | ::ffff:1.2.3.4/128 | ::ffff:1.2.3.4/128 | ::4.3.2.1/24     | ::/24
135 (17 rows)
137 SELECT '' AS ten, c AS cidr, masklen(c) AS "masklen(cidr)",
138   i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL;
139  ten |        cidr        | masklen(cidr) |       inet       | masklen(inet) 
140 -----+--------------------+---------------+------------------+---------------
141      | 192.168.1.0/24     |            24 | 192.168.1.226/24 |            24
142      | 192.168.1.0/26     |            26 | 192.168.1.226    |            32
143      | 192.168.1.0/24     |            24 | 192.168.1.0/24   |            24
144      | 192.168.1.0/24     |            24 | 192.168.1.0/25   |            25
145      | 192.168.1.0/24     |            24 | 192.168.1.255/24 |            24
146      | 192.168.1.0/24     |            24 | 192.168.1.255/25 |            25
147      | 10.0.0.0/8         |             8 | 10.1.2.3/8       |             8
148      | 10.0.0.0/32        |            32 | 10.1.2.3/8       |             8
149      | 10.1.2.3/32        |            32 | 10.1.2.3         |            32
150      | 10.1.2.0/24        |            24 | 10.1.2.3/24      |            24
151      | 10.1.0.0/16        |            16 | 10.1.2.3/16      |            16
152      | 10.0.0.0/8         |             8 | 10.1.2.3/8       |             8
153      | 10.0.0.0/8         |             8 | 11.1.2.3/8       |             8
154      | 10.0.0.0/8         |             8 | 9.1.2.3/8        |             8
155      | 10:23::f1/128      |           128 | 10:23::f1/64     |            64
156      | 10:23::8000/113    |           113 | 10:23::ffff      |           128
157      | ::ffff:1.2.3.4/128 |           128 | ::4.3.2.1/24     |            24
158 (17 rows)
160 SELECT '' AS four, c AS cidr, masklen(c) AS "masklen(cidr)",
161   i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL
162   WHERE masklen(c) <= 8;
163  four |    cidr    | masklen(cidr) |    inet    | masklen(inet) 
164 ------+------------+---------------+------------+---------------
165       | 10.0.0.0/8 |             8 | 10.1.2.3/8 |             8
166       | 10.0.0.0/8 |             8 | 10.1.2.3/8 |             8
167       | 10.0.0.0/8 |             8 | 11.1.2.3/8 |             8
168       | 10.0.0.0/8 |             8 | 9.1.2.3/8  |             8
169 (4 rows)
171 SELECT '' AS six, c AS cidr, i AS inet FROM INET_TBL
172   WHERE c = i;
173  six |      cidr      |      inet      
174 -----+----------------+----------------
175      | 192.168.1.0/24 | 192.168.1.0/24
176      | 10.1.2.3/32    | 10.1.2.3
177 (2 rows)
179 SELECT '' AS ten, i, c,
180   i < c AS lt, i <= c AS le, i = c AS eq, 
181   i >= c AS ge, i > c AS gt, i <> c AS ne,
182   i << c AS sb, i <<= c AS sbe,
183   i >> c AS sup, i >>= c AS spe
184   FROM INET_TBL;
185  ten |        i         |         c          | lt | le | eq | ge | gt | ne | sb | sbe | sup | spe 
186 -----+------------------+--------------------+----+----+----+----+----+----+----+-----+-----+-----
187      | 192.168.1.226/24 | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
188      | 192.168.1.226    | 192.168.1.0/26     | f  | f  | f  | t  | t  | t  | f  | f   | f   | f
189      | 192.168.1.0/24   | 192.168.1.0/24     | f  | t  | t  | t  | f  | f  | f  | t   | f   | t
190      | 192.168.1.0/25   | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | t  | t   | f   | f
191      | 192.168.1.255/24 | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
192      | 192.168.1.255/25 | 192.168.1.0/24     | f  | f  | f  | t  | t  | t  | t  | t   | f   | f
193      | 10.1.2.3/8       | 10.0.0.0/8         | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
194      | 10.1.2.3/8       | 10.0.0.0/32        | t  | t  | f  | f  | f  | t  | f  | f   | t   | t
195      | 10.1.2.3         | 10.1.2.3/32        | f  | t  | t  | t  | f  | f  | f  | t   | f   | t
196      | 10.1.2.3/24      | 10.1.2.0/24        | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
197      | 10.1.2.3/16      | 10.1.0.0/16        | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
198      | 10.1.2.3/8       | 10.0.0.0/8         | f  | f  | f  | t  | t  | t  | f  | t   | f   | t
199      | 11.1.2.3/8       | 10.0.0.0/8         | f  | f  | f  | t  | t  | t  | f  | f   | f   | f
200      | 9.1.2.3/8        | 10.0.0.0/8         | t  | t  | f  | f  | f  | t  | f  | f   | f   | f
201      | 10:23::f1/64     | 10:23::f1/128      | t  | t  | f  | f  | f  | t  | f  | f   | t   | t
202      | 10:23::ffff      | 10:23::8000/113    | f  | f  | f  | t  | t  | t  | t  | t   | f   | f
203      | ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | t  | t  | f  | f  | f  | t  | f  | f   | t   | t
204 (17 rows)
206 -- check the conversion to/from text and set_netmask
207 SELECT '' AS ten, set_masklen(inet(text(i)), 24) FROM INET_TBL;
208  ten |   set_masklen    
209 -----+------------------
210      | 192.168.1.226/24
211      | 192.168.1.226/24
212      | 192.168.1.0/24
213      | 192.168.1.0/24
214      | 192.168.1.255/24
215      | 192.168.1.255/24
216      | 10.1.2.3/24
217      | 10.1.2.3/24
218      | 10.1.2.3/24
219      | 10.1.2.3/24
220      | 10.1.2.3/24
221      | 10.1.2.3/24
222      | 11.1.2.3/24
223      | 9.1.2.3/24
224      | 10:23::f1/24
225      | 10:23::ffff/24
226      | ::4.3.2.1/24
227 (17 rows)
229 -- check that index works correctly
230 CREATE INDEX inet_idx1 ON inet_tbl(i);
231 SET enable_seqscan TO off;
232 SELECT * FROM inet_tbl WHERE i<<'192.168.1.0/24'::cidr;
233        c        |        i         
234 ----------------+------------------
235  192.168.1.0/24 | 192.168.1.0/25
236  192.168.1.0/24 | 192.168.1.255/25
237  192.168.1.0/26 | 192.168.1.226
238 (3 rows)
240 SELECT * FROM inet_tbl WHERE i<<='192.168.1.0/24'::cidr;
241        c        |        i         
242 ----------------+------------------
243  192.168.1.0/24 | 192.168.1.0/24
244  192.168.1.0/24 | 192.168.1.226/24
245  192.168.1.0/24 | 192.168.1.255/24
246  192.168.1.0/24 | 192.168.1.0/25
247  192.168.1.0/24 | 192.168.1.255/25
248  192.168.1.0/26 | 192.168.1.226
249 (6 rows)
251 SET enable_seqscan TO on;
252 DROP INDEX inet_idx1;
253 -- simple tests of inet boolean and arithmetic operators
254 SELECT i, ~i AS "~i" FROM inet_tbl;
255         i         |                     ~i                     
256 ------------------+--------------------------------------------
257  192.168.1.226/24 | 63.87.254.29/24
258  192.168.1.226    | 63.87.254.29
259  192.168.1.0/24   | 63.87.254.255/24
260  192.168.1.0/25   | 63.87.254.255/25
261  192.168.1.255/24 | 63.87.254.0/24
262  192.168.1.255/25 | 63.87.254.0/25
263  10.1.2.3/8       | 245.254.253.252/8
264  10.1.2.3/8       | 245.254.253.252/8
265  10.1.2.3         | 245.254.253.252
266  10.1.2.3/24      | 245.254.253.252/24
267  10.1.2.3/16      | 245.254.253.252/16
268  10.1.2.3/8       | 245.254.253.252/8
269  11.1.2.3/8       | 244.254.253.252/8
270  9.1.2.3/8        | 246.254.253.252/8
271  10:23::f1/64     | ffef:ffdc:ffff:ffff:ffff:ffff:ffff:ff0e/64
272  10:23::ffff      | ffef:ffdc:ffff:ffff:ffff:ffff:ffff:0
273  ::4.3.2.1/24     | ffff:ffff:ffff:ffff:ffff:ffff:fbfc:fdfe/24
274 (17 rows)
276 SELECT i, c, i & c AS "and" FROM inet_tbl;
277         i         |         c          |      and       
278 ------------------+--------------------+----------------
279  192.168.1.226/24 | 192.168.1.0/24     | 192.168.1.0/24
280  192.168.1.226    | 192.168.1.0/26     | 192.168.1.0
281  192.168.1.0/24   | 192.168.1.0/24     | 192.168.1.0/24
282  192.168.1.0/25   | 192.168.1.0/24     | 192.168.1.0/25
283  192.168.1.255/24 | 192.168.1.0/24     | 192.168.1.0/24
284  192.168.1.255/25 | 192.168.1.0/24     | 192.168.1.0/25
285  10.1.2.3/8       | 10.0.0.0/8         | 10.0.0.0/8
286  10.1.2.3/8       | 10.0.0.0/32        | 10.0.0.0
287  10.1.2.3         | 10.1.2.3/32        | 10.1.2.3
288  10.1.2.3/24      | 10.1.2.0/24        | 10.1.2.0/24
289  10.1.2.3/16      | 10.1.0.0/16        | 10.1.0.0/16
290  10.1.2.3/8       | 10.0.0.0/8         | 10.0.0.0/8
291  11.1.2.3/8       | 10.0.0.0/8         | 10.0.0.0/8
292  9.1.2.3/8        | 10.0.0.0/8         | 8.0.0.0/8
293  10:23::f1/64     | 10:23::f1/128      | 10:23::f1
294  10:23::ffff      | 10:23::8000/113    | 10:23::8000
295  ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | ::0.2.2.0
296 (17 rows)
298 SELECT i, c, i | c AS "or" FROM inet_tbl;
299         i         |         c          |        or        
300 ------------------+--------------------+------------------
301  192.168.1.226/24 | 192.168.1.0/24     | 192.168.1.226/24
302  192.168.1.226    | 192.168.1.0/26     | 192.168.1.226
303  192.168.1.0/24   | 192.168.1.0/24     | 192.168.1.0/24
304  192.168.1.0/25   | 192.168.1.0/24     | 192.168.1.0/25
305  192.168.1.255/24 | 192.168.1.0/24     | 192.168.1.255/24
306  192.168.1.255/25 | 192.168.1.0/24     | 192.168.1.255/25
307  10.1.2.3/8       | 10.0.0.0/8         | 10.1.2.3/8
308  10.1.2.3/8       | 10.0.0.0/32        | 10.1.2.3
309  10.1.2.3         | 10.1.2.3/32        | 10.1.2.3
310  10.1.2.3/24      | 10.1.2.0/24        | 10.1.2.3/24
311  10.1.2.3/16      | 10.1.0.0/16        | 10.1.2.3/16
312  10.1.2.3/8       | 10.0.0.0/8         | 10.1.2.3/8
313  11.1.2.3/8       | 10.0.0.0/8         | 11.1.2.3/8
314  9.1.2.3/8        | 10.0.0.0/8         | 11.1.2.3/8
315  10:23::f1/64     | 10:23::f1/128      | 10:23::f1
316  10:23::ffff      | 10:23::8000/113    | 10:23::ffff
317  ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | ::ffff:5.3.3.5
318 (17 rows)
320 SELECT i, i + 500 AS "i+500" FROM inet_tbl;
321         i         |      i+500       
322 ------------------+------------------
323  192.168.1.226/24 | 192.168.3.214/24
324  192.168.1.226    | 192.168.3.214
325  192.168.1.0/24   | 192.168.2.244/24
326  192.168.1.0/25   | 192.168.2.244/25
327  192.168.1.255/24 | 192.168.3.243/24
328  192.168.1.255/25 | 192.168.3.243/25
329  10.1.2.3/8       | 10.1.3.247/8
330  10.1.2.3/8       | 10.1.3.247/8
331  10.1.2.3         | 10.1.3.247
332  10.1.2.3/24      | 10.1.3.247/24
333  10.1.2.3/16      | 10.1.3.247/16
334  10.1.2.3/8       | 10.1.3.247/8
335  11.1.2.3/8       | 11.1.3.247/8
336  9.1.2.3/8        | 9.1.3.247/8
337  10:23::f1/64     | 10:23::2e5/64
338  10:23::ffff      | 10:23::1:1f3
339  ::4.3.2.1/24     | ::4.3.3.245/24
340 (17 rows)
342 SELECT i, i - 500 AS "i-500" FROM inet_tbl;
343         i         |                 i-500                  
344 ------------------+----------------------------------------
345  192.168.1.226/24 | 192.167.255.238/24
346  192.168.1.226    | 192.167.255.238
347  192.168.1.0/24   | 192.167.255.12/24
348  192.168.1.0/25   | 192.167.255.12/25
349  192.168.1.255/24 | 192.168.0.11/24
350  192.168.1.255/25 | 192.168.0.11/25
351  10.1.2.3/8       | 10.1.0.15/8
352  10.1.2.3/8       | 10.1.0.15/8
353  10.1.2.3         | 10.1.0.15
354  10.1.2.3/24      | 10.1.0.15/24
355  10.1.2.3/16      | 10.1.0.15/16
356  10.1.2.3/8       | 10.1.0.15/8
357  11.1.2.3/8       | 11.1.0.15/8
358  9.1.2.3/8        | 9.1.0.15/8
359  10:23::f1/64     | 10:22:ffff:ffff:ffff:ffff:ffff:fefd/64
360  10:23::ffff      | 10:23::fe0b
361  ::4.3.2.1/24     | ::4.3.0.13/24
362 (17 rows)
364 SELECT i, c, i - c AS "minus" FROM inet_tbl;
365         i         |         c          |      minus       
366 ------------------+--------------------+------------------
367  192.168.1.226/24 | 192.168.1.0/24     |              226
368  192.168.1.226    | 192.168.1.0/26     |              226
369  192.168.1.0/24   | 192.168.1.0/24     |                0
370  192.168.1.0/25   | 192.168.1.0/24     |                0
371  192.168.1.255/24 | 192.168.1.0/24     |              255
372  192.168.1.255/25 | 192.168.1.0/24     |              255
373  10.1.2.3/8       | 10.0.0.0/8         |            66051
374  10.1.2.3/8       | 10.0.0.0/32        |            66051
375  10.1.2.3         | 10.1.2.3/32        |                0
376  10.1.2.3/24      | 10.1.2.0/24        |                3
377  10.1.2.3/16      | 10.1.0.0/16        |              515
378  10.1.2.3/8       | 10.0.0.0/8         |            66051
379  11.1.2.3/8       | 10.0.0.0/8         |         16843267
380  9.1.2.3/8        | 10.0.0.0/8         |        -16711165
381  10:23::f1/64     | 10:23::f1/128      |                0
382  10:23::ffff      | 10:23::8000/113    |            32767
383  ::4.3.2.1/24     | ::ffff:1.2.3.4/128 | -281470631346435
384 (17 rows)
386 SELECT '127.0.0.1'::inet + 257;
387  ?column?  
388 -----------
389  127.0.1.2
390 (1 row)
392 SELECT ('127.0.0.1'::inet + 257) - 257;
393  ?column?  
394 -----------
395  127.0.0.1
396 (1 row)
398 SELECT '127::1'::inet + 257;
399  ?column? 
400 ----------
401  127::102
402 (1 row)
404 SELECT ('127::1'::inet + 257) - 257;
405  ?column? 
406 ----------
407  127::1
408 (1 row)
410 SELECT '127.0.0.2'::inet  - ('127.0.0.2'::inet + 500);
411  ?column? 
412 ----------
413      -500
414 (1 row)
416 SELECT '127.0.0.2'::inet  - ('127.0.0.2'::inet - 500);
417  ?column? 
418 ----------
419       500
420 (1 row)
422 SELECT '127::2'::inet  - ('127::2'::inet + 500);
423  ?column? 
424 ----------
425      -500
426 (1 row)
428 SELECT '127::2'::inet  - ('127::2'::inet - 500);
429  ?column? 
430 ----------
431       500
432 (1 row)
434 -- these should give overflow errors:
435 SELECT '127.0.0.1'::inet + 10000000000;
436 ERROR:  result is out of range
437 SELECT '127.0.0.1'::inet - 10000000000;
438 ERROR:  result is out of range
439 SELECT '126::1'::inet - '127::2'::inet;
440 ERROR:  result is out of range
441 SELECT '127::1'::inet - '126::2'::inet;
442 ERROR:  result is out of range
443 -- but not these
444 SELECT '127::1'::inet + 10000000000;
445      ?column?     
446 ------------------
447  127::2:540b:e401
448 (1 row)
450 SELECT '127::1'::inet - '127::2'::inet;
451  ?column? 
452 ----------
453        -1
454 (1 row)