Re: Comparing first 3 numbers of a IPv4 address?

Поиск
Список
Период
Сортировка
От Dmitriy Igrishin
Тема Re: Comparing first 3 numbers of a IPv4 address?
Дата
Msg-id AANLkTi=tEhkoii7+01cXDgHrHjNp+LzSHYaknjBobQ4o@mail.gmail.com
обсуждение исходный текст
Ответ на Comparing first 3 numbers of a IPv4 address?  (Alexander Farber <alexander.farber@gmail.com>)
Ответы Re: Comparing first 3 numbers of a IPv4 address?  (Alexander Farber <alexander.farber@gmail.com>)
Список pgsql-general
Hey Alexander,

2010/11/20 Alexander Farber <alexander.farber@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.


В списке pgsql-general по дате отправления:

Предыдущее
От: Elliot Chance
Дата:
Сообщение: Re: [pgsql-www] Forums at postgresql.com.au
Следующее
От: Alexander Farber
Дата:
Сообщение: Re: Comparing first 3 numbers of a IPv4 address?