Я знаю, что этот вопрос задавался ранее для разных языков, но, насколько я вижу, он опирается на функции управления потоком ("для циклов") и / или esoteri c Perl.
Итак, в PostgreSQL я пытаюсь написать миграцию базы данных, чтобы преобразовать нашу сетевую информацию, хранящуюся как text
, в надлежащие inet
типы. Предположим, что моя таблица «Foo» имеет два столбца: «адрес», в котором хранится сам IP-адрес, и «маска сети», в которой хранится «маска сети» (например, '255.255.255.0'
). Я хочу вставить их в одно поле 'ip' новой таблицы 'Bar' в виде одного столбца типа inet
.
Пока что то, что у меня есть, довольно просто для преобразования IP, но я борюсь за длину маски. Я предполагаю, что это будет выглядеть примерно так:
INSERT INTO bar(ip)
SELECT set_masklen(address::inet, calculate_masklen_from_netmask(netmask))
FROM foo
;
... но я понятия не имею, как определить эту функцию calculate_masklen_from_netmask
, поскольку я не могу использовать структуры управления потоком в языке на основе операторов.