gpt4 book ai didi

sql - Postgres 9.x - 有没有办法避免将数据库连接信息硬编码到 View 中?

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:33 24 4
gpt4 key购买 nike

我经常手动将生产数据拉入我的测试数据库,这样我就可以在实际数据上测试新代码,以及测试升级方案或重现数据特定错误。为此,我为测试数据库中的每个生产表设置了一个 VIEW。这些 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 个这样的 View 来代理生产数据,但是我发现必须将生产数据库连接信息硬编码到每个 View 中有点老套。

我的问题:是否有避免硬编码或至少在每个 View 上复制此连接信息的好方法?我可以使用数据库级变量、环境变量或其他任何东西代替吗?

最佳答案

为避免重复,您可以将连接字符串存储在表中:

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)
);

关于sql - Postgres 9.x - 有没有办法避免将数据库连接信息硬编码到 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10605622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com