3

多くの場合、実稼働データをテスト データベースに手動で取り込んで、実際のデータで新しいコードをテストしたり、アップグレード シナリオやデータ固有のバグを再現したりします。これを行うため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 個持っていますが、実動データベース接続情報を各ビューにハードコーディングする必要があるのはややハックだと思います。

私の質問:ハードコーディングを回避する、または少なくとも各ビューでこの接続情報を複製する良い方法はありますか? 代わりに、データベース レベルの変数、環境変数、またはその他のものを使用できますか?

4

1 に答える 1

1

重複を避けるために、接続文字列をテーブルに保存できます。

CREATE VIEW ProdLink.Users AS
    select * from dblink(
        (select conn_string from conn_string where conn = 'that_one'),
        'select * from users'
    ) as t1 (
        userid uuid, 
        email varchar(50), 
        alias varchar(50), 
        fullname varchar(50), 
        password varchar(100)
    );
于 2012-05-15T19:41:08.070 に答える