結局使わなかったけど、postgres_fdwの定義方法を調べたのでメモ。
postgres_fdwとは?
2つのpostgresqlのデータベースがある場合に、一方のデータベースから他方のデータベースのテーブルを参照する技術です。
一度FOREIGN TABLEを定義すれば、ローカルにあるデータベースと同じようにSELECT, INSERT, UPDATE, DELETEができます。
設定が必要なのは参照する側のデータベースのみで被参照のデータベースの方は何一つ手を入れる必要はありません。
heroku-postgresでも試しましたが、何の問題もなく動きました。
How to use
細かいところはドキュメントを読んでもらうとして、実際に流したSQLは以下のような感じです。
FOREIGN TABLEはいくつでも定義することができます。
CREATE EXTENSION postgres_fdw;
CREATE SERVER app1 FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'xxxx.compute-1.amazonaws.com', dbname 'xxxx', port '5432');
CREATE USER MAPPING FOR public SERVER app1
OPTIONS (user 'xxxx', password 'xxxx');
CREATE FOREIGN TABLE app1_users (
id BIGINT,
name VARCHAR(40) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NULL,
image_url VARCHAR(255) NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) SERVER app1
OPTIONS (table_name 'users');
SELECT count(*) FROM app1_users;
heroku-postgresにつなぐ場合はSSLの設定が必要かと思いましたがデフォルトがPreferred(必要であればSSLを使う)なので、特に設定しなくても問題なく動きました。
便利です。