You can. host() just extract IP address from a value of inet
type as text, string_to_array() converts this text to text[], and
it makes it possible to compare with another text[]... I see no
problem here. It works just fine.
But probably there is another (better) solution...

2010/11/20 Alexander Farber <alexander.far...@gmail.com>

> I'm actually hoping to use inet (or cidr?) instead of strings...
>
>
>
> On 11/20/10, Dmitriy Igrishin <dmit...@gmail.com> wrote:
> > Hey Alexander,
> >
> > 2010/11/20 Alexander Farber <alexander.far...@gmail.com>
> >
> >> Hello,
> >>
> >> I'm trying to program a PHP-script, where users
> >> can rate the "goodness" of the other players:
> >>
> >>        create table pref_rep (
> >>                id varchar(32) references pref_users(id) check (id <>
> >> author),
> >>                author varchar(32) references pref_users(id),
> >>                author_ip inet,
> >>                good boolean,
> >>                last_rated timestamp default current_timestamp
> >>        );
> >>
> >> To (try to) prevent tampering I'd like to delete
> >> entries for the same id coming
> >> from the same IP in the course of last hour:
> >>
> >>        create or replace function pref_update_rep(_id varchar,
> >>                _author varchar, _author_ip inet,
> >>                _good boolean) returns void as $BODY$
> >>                begin
> >>
> >>                delete from pref_rep
> >>                where id = _id and
> >>                author_ip = _author_ip and
> >>                age(to_timestamp(last_rated)) < interval '1 hour';
> >>
> >>                update pref_rep set
> >>                    author    = _author,
> >>                    author_ip = _author_ip,
> >>                    good      = _good,
> >>                    last_rated = current_timestamp
> >>                where id = _id and author = _author;
> >>
> >>                if not found then
> >>                        insert into pref_rep(id, author, author_ip, good)
> >>                        values (_id, _author, _author_ip, _good);
> >>                end if;
> >>                end;
> >>        $BODY$ language plpgsql;
> >>
> >> I have 2 questions please:
> >>
> >> 1) if I'd like to compare just the first 3 numbers of
> >> the IP address instead of the 4, how can I do it?
> >> (yes, I know about the A,B,C type of IPv4 networks...)
> >>
> > You may try something like this (this solution can be better):
> > SELECT (string_to_array(host('192.168.1.123'), '.'))[1:3];
> > to get first 3 bytes of IP in array (ready to compare with another
> > array).
> >
> >
> >> 2) Do I need to add an index to my table
> >> or are id and author indexed already?
> >>
> > Foreign keys columns does not indexed. You should create them
> > manually (if you need).
> >
> >
> >>
> >> Thank you!
> >> Alex
> >>
> >> --
> >> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> >> To make changes to your subscription:
> >> http://www.postgresql.org/mailpref/pgsql-general
> >>
> >
> >
> >
> > --
> > // Dmitriy.
> >
>
> --
> Sent from my mobile device
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>



-- 
// Dmitriy.

Reply via email to