テーブル間でデータをコピーする必要があります。 2つのテーブルの構造はほぼ同じですが、データベースは異なります。
私は試した
INSERT INTO db1.public.table2(
id,
name,
adress,
lat,
lng
)
SELECT
id,
name,
adress,
lat
lng
FROM db2.public.table2;
wenn私はこれを試します、データベース間でエラーが発生します...実装されていません
これは本当に簡単な作業です。この目的でdblinkを使用するだけです。
INSERT INTO t(a, b, c)
SELECT a, b, c FROM dblink('Host=xxx user=xxx password=xxx dbname=xxx', 'SELECT a, b, c FROM t') AS x(a integer, b integer, c integer)
外部データベースから定期的にデータをフェッチする必要がある場合は、サーバーとユーザーのマッピングを定義することをお勧めします。次に、より短いステートメントを使用できます:
dblink('yourdbname', 'your query')
それを行う別の方法もあります。 dblink拡張機能が利用できない場合は、標準入力と出力を接続するパイプを使用して、コマンドラインで直接データをコピーすることが可能です。
psql source_database -c 'COPY table TO stdout' | psql target_database -c 'COPY table FROM stdin'
しかし、これはpostgres 9.4以降でのみ機能します
Psqlセッションでpostgresql 9.0以降(おそらく8.0以降)を使用している場合は、次も使用できます。
CREATE DATABASE new_database TEMPLATE original_database;
New_databaseは、テーブル、テーブルスキーマ、エンコーディング、データを含むoriginal_databaseのクローンになります。
主な制限は、コピー中はソースデータベースに他のセッションを接続できないことです。
新旧のdbテーブルからの賢明な選択によって、クローンが実際に正しいことを確認することをお勧めします。ドキュメントはまた言う:
ただし、これは(まだ)汎用の「COPY DATABASE」機能としては意図されていないことを理解することが重要です。