1

実行したいクエリは次のとおりです。このクエリを実行している現在のデータベースは db1 であり、レコードを挿入するデータベースは db2 です。

  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,
 );

編集:リモート挿入とローカル選択を行いたいことに注意してください。db1の代わりにローカルデータベースとしてdb2でクエリを実行すると、上記のクエリを使用してこれを達成できるようです

4

1 に答える 1

3

MySQL でできるように、別のデータベースのテーブルに直接アクセスすることはできません (MySQLデータベースは PostgreSQLスキーマに対応します)。

したがって、単一のデータベースで異なるスキーマを使用することで、目的を達成できる可能性があります。

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

のテーブルを指すforeign_employeeデータベースで、外部テーブルを定義する必要があります。これを呼びましょう。db1db2

次に、次のようにできます。

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

LIMITで強制しない限り、クエリ結果に暗黙的な順序がないため、ここでは少し奇妙であることに注意してくださいORDER BY

于 2016-11-14T14:04:28.047 に答える