2014-03-28 76 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; 
相關問題