2016-11-14 6 views
0

実行したいクエリがあります。このクエリを実行している現在のデータベースをdb1とし、レコードを挿入するデータベースをdb2としましょう。postgres_fdwを使って挿入クエリを別のデータベースに組み立てるにはどうすればよいですか?

insert into db2.employee(id, name, group) values(id, <db1.employee.name>, <db1.employee.group>) where id in (select id from archived limit 2); 

あなたが見ることができるように、値はDB1(現在のデータベース)の従業員テーブルから選択した後、DB2の従業員テーブルに挿入されなければなりません。

私は質問が間違っていることを知っていますが、私は何をしようとしているのかを説明するだけです。

私はどのようにpostgres_fdwを使用してクエリを定式化しますか?

私はこのクエリを使用して、他の方法ラウンド何かを試してみました

INSERT INTO employee select * from 
dblink('host=10.1.1.1 
user=user 
password=password 
dbname=mydb', 'select * from employee') tt(
     id int, 
    name character varying, 
); 

編集:私は、リモートインサートとローカル選択をしたいので、予めご了承ください。私は私のローカルデータベースの代わりに、あなたはMySQLの(MySQLの中で行うことができます直接のように異なるデータベース内のテーブルにアクセスすることはできません

答えて

1

DB1とDB2でクエリを実行すると上記のクエリを使用して、これを達成することができる午前よう に思えますデータベースは、PostgreSQL スキーマに対応します。

多分、単一のデータベースで異なるスキーマを使用することで、あなたが望むものを達成することができます。

実際に別のデータベースのテーブルを更新する必要がある場合は、外部テーブルにアクセスするために外部データラッパーpostgres_fdwを使用する必要があります。

あなたはのはdb2にテーブルを指すデータベースdb1foreign_employee –を呼びましょう外国人のテーブル–を定義する必要があります。あなたはORDER BYと1を強制しない限り、暗黙の順序がクエリ結果ではありませんので、LIMITが、ここで少し奇妙であることを

INSERT INTO foreign_employee 
SELECT e.* 
FROM employee e 
    JOIN archived a USING id 
LIMIT 2; 

注:

次に、あなたがそのようにそれを行うことができます。

+0

実際のテーブルに行を挿入する - 外部テーブルからdb2.employee - どのようにそれを行うには? – Tisha

+0

'db2.employee' *は*外部テーブルですか、いいえ? 2つのテーブルに 'WITH x AS(INSERT ... RETURNING ...)INSERT ... SELECT ... FROM x'のようなものを使用する場合は、2つのテーブルに挿入します。 –

+0

db2.employeeは実際のテーブルです。これはdb2に存在します。それはdb1.employeeと同じスキーマを持っています – Tisha

関連する問題