我知道这个问题以前曾针对不同的语言提出过,但据我所知,它依赖于流控制(“for 循环”)和/或深奥的 Perl 函数。
所以在 PostgreSQL 中,我正在尝试编写一个数据库迁移来将我们存储的网络信息转换text
为适当的inet
类型。假设我的“Foo”表有两列,“地址”存储 IP 地址本身,“网络掩码”存储“网络掩码”(例如'255.255.255.0'
)。我想将这些作为单一inet
类型的列插入到新“Bar”表的单个“ip”字段中。
到目前为止,我所得到的转换 IP 非常简单,但我在掩码长度上苦苦挣扎。我认为它看起来像:
INSERT INTO bar(ip)
SELECT set_masklen(address::inet, calculate_masklen_from_netmask(netmask))
FROM foo
;
...但我不知道如何定义该函数,calculate_masklen_from_netmask
因为我不能在基于语句的语言中使用流控制结构。