Рассчитать масклин из строки маски маски в PostgreSQL - PullRequest
0 голосов
/ 14 апреля 2020

Я знаю, что этот вопрос задавался ранее для разных языков, но, насколько я вижу, он опирается на функции управления потоком ("для циклов") и / или 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, поскольку я не могу использовать структуры управления потоком в языке на основе операторов.

...