3

PostgreSQL9.1を使用しています。あるデータベースのあるテーブルから別のデータベースの別のテーブルに必要な列を転送する必要がありますが、スキーマは転送しません。ファイルはにある必要があることが
わかりました。しかし、私のフォルダは空です。ファイルを どこでダウンロードしてクエリを実行できますか?dblink.sqlshare/contribcontribdblink.sql

クエリを実行すると、エラーメッセージが表示されます。

cross database reference is not possible ...

2つのデータベース間でデータを転送する方法を教えてもらえますか?

4

1 に答える 1

8

関連する質問で詳しく説明されているようにパッケージをシステムにインストールした後、拡張機能dblinkをデータベースにインストールします(このコードを実行しているデータベースでは、外部データベースはそれを必要としません)。

CREATE EXTENSION dblink;

コード例はマニュアルにあります。
これは、データベース間でデータをコピーするために使用するものの簡単なバージョンです。まず、FOREIGNSERVERを作成します。

CREATE SERVER mydb
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '111.111.111.111',port '5432',dbname 'mydb');

FOREIGN DATA WRAPPER postgresql私の場合はプリインストールされていました。
次に、接続を開き、古いデータ(場合によっては)を削除し、新しいデータをフェッチANALYZEし、接続を実行して閉じる関数を作成します。

CREATE OR REPLACE FUNCTION f_tbl_sync()
  RETURNS text AS
$BODY$
SELECT dblink_connect('mydb');  -- USER MAPPING for postgres, PW in .pgpass

TRUNCATE tbl;  -- optional

INSERT INTO tbl
SELECT * FROM dblink(
  'SELECT tbl_id, x, y
   FROM   tbl
   ORDER  BY tbl_id')
    AS b(
 tbl_id int
,x int
,y int)

ANALYZE tbl;

SELECT dblink_disconnect();
$BODY$
  LANGUAGE sql VOLATILE;
于 2013-02-10T12:05:42.257 に答える