Search Postgresql Archives

Questions about Views, Rules and DBLink

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 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

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

               http://archives.postgresql.org


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux