2011-06-09 6 views
2

Je suis nouveau à PostgreSQL. J'ai 2 bases de données dans PostgreSQL 9.0, db1 et db2, et avec DB2 j'ai un accès en lecture seule. Je veux créer une fonction stockée qui serait facilement accomplie avec une requête JOIN ou une requête imbriquée, ce que PostgreSQL ne peut pas faire à travers les bases de données.PostgreSQL rejoindre à travers 2 bases de données

En DB1, j'ai table1 où je peux interroger pour un ensemble de touches clés étrangères que je peux utiliser pour rechercher des enregistrements dans un table2 dans db2, quelque chose comme:

SELECT * from db2.table2 WHERE db2.table2.primary_key IN (
    SELECT db1.table1.foreign_key FROM db1.table1 WHERE 
     db1.table1.primary_key="whatever"); 

Quelle est la meilleure pratique pour ce faire dans Postgres? Je ne peux pas utiliser de tables temporaires dans db2, et passer dans les clés étrangères en tant que paramètre dans une fonction stockée dans db2 ne semble pas être une bonne solution.

Note: les touches sont VARCHAR (11)

+0

Une option que vous voudrez peut-être enquêter sur l'utilisation des schemas: http://www.postgresql.org/docs/8.4/interactive/ddl-schemas.html –

Répondre

5

Vous aurez envie de regarder dans la contrib db_link. En outre, si vous êtes familier avec C, il existe également une fonctionnalité mignonne appelée foreign data wrappers. Il permet de manipuler à peu près n'importe quelle source en utilisant SQL. Example with Twitter:

SELECT from_user, created_at, text FROM twitter WHERE q = '#postgresql'; 
+1

Cela semble bien fonctionner après l'installation dblink: 'SELECT * DE table2 OÙ table2.primary_key IN ( SELECT * FROM dblink ('dbname = DB1 user = readonly', 'SELECT foreign_key FROM table1 OÙ foreign_key =?) AS temp1 (foreign_key varchar (11)) ); ' – MuffinMan

Questions connexes