2014-03-28 41 views
1

我使用PDNS与Postgresql后端。我有多个区域,每个SOA记录看起来有点像这样:Postgresql数据库与DNS记录:如何大量增加串行

 
pdns=# SELECT content FROM records WHERE type = 'SOA'; 
ns1.example.com. hostmaster.example.com. 2014031201 14400 1800 604800 3600 
ns1.otherzone.tld. hostmaster.otherzone.tld. 2014022403 14400 1800 604800 3600 
... 

如何批量更新序列号?我想了解如何将它们增加一个,或者如何将它们设置为像今天这样的特定项目,将会是2014032800

回答

1

似乎很少模仿我 - 或者说,他们已经非常规化了数据以便高效查询,使得在SQL中操作起来非常困难。

你需要:

  • 匹配和提取SOA
  • 增加它
  • 重建原始的字符串形式

空格没有在域名允许,您可以使用模式匹配为此脱身,如string_to_array,regexp_split_to_table等。

类似于:

CREATE OR REPLACE FUNCTION increment_soa(text) RETURNS text AS $$ 
SELECT 
    array_to_string(
    array_cat(
     part[1:2], 
     array_cat(
     ARRAY[(part[3]::integer + 1)::text], 
     part[4:7] 
    ) 
    ), 
    ' ' 
) 
FROM (
    SELECT string_to_array($1, ' ') 
) soa_parts(part) 
$$ LANGUAGE sql; 
相关问题