pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Bruce Momjian <pgman@candle.pha.pa.us>
To: Dan Langille <dan@langille.org>
Cc: pgsql-sql@postgresql.org
Subject: Re: inet versus text for ip addresses
Date: Sun, 20 Jul 2003 23:47:04 -0400 (EDT)
Message-ID: <200307210347.h6L3l4L23262@candle.pha.pa.us> (raw)
In-Reply-To: <3F05DEA4.5526.6F4CF1C5@localhost>

Dan Langille wrote:
> The PostgreSQL inet datatype stores an holds an IP host address, and 
> optionally the identity of the subnet it is in, all in one field.  
> This requires 12 bytes.   
> 
> Using my "random" data of approximately 8000 IP addresses collected 
> during previous polls, I've found the average length of an IP address 
> is 13.1 bytes.    An integer requires 4 bytes.
> 
> First question: Why not store an option to store just an IP address?  
> That should require less than the 12 bytes for inet.

We store inet and cidr in similar structures, and they are of variable
length (4 byte overhead):

	/*
	 *  This is the internal storage format for IP addresses
	 *  (both INET and CIDR datatypes):
	 */
	typedef struct
	{
	    unsigned char family;
	    unsigned char bits;
	    unsigned char type;
	    union
	    {
	        unsigned int ipv4_addr; /* network byte order */
	        /* add IPV6 address type here */
	    }           addr;
	} inet_struct;
	
	/*
	 * Both INET and CIDR addresses are represented within Postgres as varlena
	 * objects, ie, there is a varlena header (basically a length word) in front
	 * of the struct type depicted above.
	 *
	 * Although these types are variable-length, the maximum length
	 * is pretty short, so we make no provision for TOASTing them.
	 */
	typedef struct varlena inet;

In 7.4, we support IPv6, so they will be even larger.


-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073



view thread (2+ messages)

Message-ID: <200307210347.h6L3l4L23262@candle.pha.pa.us>
Permalink:  ../200307210347.h6L3l4L23262@candle.pha.pa.us/
Also on:    postgresql.org/message-id/200307210347.h6L3l4L23262@candle.pha.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: pgman@candle.pha.pa.us, dan@langille.org
  Subject: Re: inet versus text for ip addresses
  In-Reply-To: <200307210347.h6L3l4L23262@candle.pha.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox