多くの場合、実稼働データをテスト データベースに手動で取り込んで、実際のデータで新しいコードをテストしたり、アップグレード シナリオやデータ固有のバグを再現したりします。これを行うためVIEW
に、テスト データベースに各運用テーブルをセットアップしました。これらのビューは次のようになります。
CREATE VIEW ProdLink.Users AS
select * from dblink(
'hostaddr=123.123.123.123 dbname=ProductionDB user=ROUser password=secret',
'select * from users') as t1(userid uuid, email varchar(50), alias varchar(50), fullname varchar(50), password varchar(100));
これで、本番データベースで次を実行できます。
SELECT * FROM ProdLink.Users;
そして、本番データベースのすべてのユーザーを表示します。次に、次のようなことができます。
INSERT INTO Users SELECT * FROM ProdLink.Users L WHERE NOT EXISTS (select 1 from Users where Users.UserId = L.UserId);
テストにまだ存在しないすべてのユーザーを本番環境から引き込むことができます。
実動データをプロキシするためにこれらのビューを約 30 個持っていますが、実動データベース接続情報を各ビューにハードコーディングする必要があるのはややハックだと思います。
私の質問:ハードコーディングを回避する、または少なくとも各ビューでこの接続情報を複製する良い方法はありますか? 代わりに、データベース レベルの変数、環境変数、またはその他のものを使用できますか?