我经常手动将生产数据导入我的测试数据库,这样我就可以测试实际数据的新代码,以及测试升级方案或repro数据特定的错误。为此,我为测试数据库中的每个生产表设置了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个这样的视图,但是我觉得必须在生产数据库连接信息中硬编码到每个视图中。
我的问题:有没有一种方法可以避免硬编码,或者至少在每个视图上复制此连接信息?我可以使用数据库级变量,环境变量或其他任何东西吗?
答案 0 :(得分: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)
);