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 回答