Questions about Views, Rules and DBLink

Поиск
Список
Период
Сортировка
От Joao Afonso
Тема Questions about Views, Rules and DBLink
Дата
Msg-id ce04e69f0507311451685786fe@mail.gmail.com
обсуждение исходный текст
Ответы Re: Questions about Views, Rules and DBLink  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
 Hi!

 I'm using dblink with some DBs and i'm having a few problems, more
precisely with the dblink_current_query() function.

 First I create the following views on a DB:

- create or replace view users as
 select *
 from dblink('hostaddr=127.0.0.1 dbname=teste user=postgres
password=postgres','select * from users')
 as t1(user_id int4, username varchar(20), passwd varchar(20), address
varchar(100), phone varchar(20), group_id int4);

- create or replace view utilizadores as
 select *
 from dblink('hostaddr=127.0.0.1 dbname=teste1 user=postgres
password=postgres','select * from utilizadores')
 as t1(user_id int4, nome varchar(100), sexo char(1), idade int2,
altura int4, peso int2);

With these views I can access and manipulate the records of tables
'users' and 'utilizadores' remotely using dblink_exec() with
dblink_current_query() as parameter directly and transparently, since
the remote tables have the same name of the views. The following rule
does the trick on insert (for example):

- CREATE OR REPLACE RULE users_ins AS ON INSERT TO users
    DO INSTEAD
    select dblink_exec(
    'hostaddr=127.0.0.1 dbname=teste user=postgres password=postgres',
    dblink_current_query()
    );


 So far so good, now I do the following:

- create or replace view users_util as
 select
    us.user_id, us.username, us.passwd, ut.nome, ut.sexo, ut.idade,
ut.altura, ut.peso, us.address, us.phone, us.group_id
 from
    users us, utilizadores ut
 where
    us.user_id = ut.user_id


 This creates a view that is a join of the previous views users and
utilizadores. Imagine I want to create a rule that on insert does
instead the insert on the view users:

 - CREATE OR REPLACE RULE users_util_ins AS ON INSERT TO users_util
    DO INSTEAD
    INSERT INTO users VALUES (
           NEW.user_id,
           NEW.username,
           NEW.passwd,
           NEW.address,
           NEW.phone,
           NEW.group_id
    )


 So now if I do:

- insert into users_util (username, passwd, nome, sexo, idade, altura,
peso, address, phone, group_id) values ('prof_04', 'prof_04',
'prof_04', 'm', 45, 165, 80, 'r. da frente, nº100', '12323572', 13);

 The rule should issue the query:

 - insert into users values ('prof_04', 'prof_04', 'r. da frente,
nº100', '12323572', 13);

The problem is that the query being sent to table users is the same
that I perform on the users_util view...


  So (finally), my question is why does this happen? Using instead on
the users_util insert rule shouldn't discard the original query and
rewrite it according to the specified on the rule?? Is this a problem
of dblink?


 Sorry about the extent of my message and thanks in advance,
 Joao Afonso

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

Предыдущее
От: eoghan
Дата:
Сообщение: postmaster
Следующее
От: William Bug
Дата:
Сообщение: Re: Tool for database design documentation?