![PowerDNS pgSQL 配置不同的架构](https://linux22.com/image/618226/PowerDNS%20pgSQL%20%E9%85%8D%E7%BD%AE%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9E%B6%E6%9E%84.png)
我已经使用 PowerDNS 几年了,最后决定改用 pgSQL 而不是 mySQL。我一直在研究这个问题,但没有找到任何可靠的答案,所以我认为这可能是不可能的。
我很好奇,是否可以在名为 的架构(pdns
而不是名为 的数据库)中安装和运行 PowerDNS pdns
?我找不到任何选项来告诉 PowerDNS 查看 X 数据库和 Y 架构。
例如,我有一个名为 的数据库example
,在这个数据库中,我有两个模式,分别称为mydb
和pdns
。我想在pdns
模式中安装 PowerDNS 表结构,然后从该模式运行 PowerDNS 服务。当表位于模式中时,它似乎工作正常public
。
答案1
最容易实现这一点的方法是改变角色的搜索路径。
在目标数据库中创建新的模式 pdns。在该模式中创建所需的所有表。创建 pdns 角色(用户)时,将其搜索路径设置为在公开之前搜索您的 pdns 模式。将 pdns 模式的访问权限授予 pdns 角色。
create schema pdns;
# create your tables as pdns.tablename
create role pdns with password 'yourpassword';
alter role pdns set search_path = "$user",pdns,public;
grant usage on schema pdns to pdns;
grant select,insert,update,delete on all tables in schema pdns to pdns;
grant select,update on all sequences in schema pdns to pdns;
如果您撤销 pdns 对其他表的任何访问权限,则不必太担心分离。这样就差不多了。
编辑:注意:如果您是 Postgres 新手,您可能不知道,虽然您可以授予对架构中所有表的访问权限,但如果您添加或重新添加表,则必须授予对新表的访问权限(通过重新运行授权命令)。这就是为什么此答案中的授权是最后的。
答案2
http://mailman.powerdns.com/pipermail/pdns-users/2005-July/002524.html
就像本网站上提到的那样,可能通过一些“黑客攻击”实现
you can fake this by redefining all gmysql queries. Extract
the current queries like this:
$ /usr/sbin/pdns_server --launch=gmysql --config 2>&1 | grep -i gmysql | grep query=
And change all instances of 'records' by 'blah-records', and insert this in
your configuration.
您将用 pdns.records 替换“blah-records”
如果这不起作用,那么您唯一的选择就是编写一个包装器来动态重写 postgres 查询。(可能比它值得的工作更多)。您的要求不受支持,简短的回答是:不应该这样做
附言:您可以自行查找上述命令的 postgres 等效项..(如果存在)